Despliegue del código de cadenas con la CLI

Una vez creado el proyecto de código de cadenas, puede desplegarlo localmente en la red de Hyperledger Fabric generada automáticamente, o bien de forma remota en Oracle Blockchain Platform Cloud o Enterprise Edition. También puede empaquetar el proyecto de código de cadenas para el despliegue manual en Oracle Blockchain Platform.

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

Una vez que haya creado el proyecto de código de cadenas, puede desplegarlo en una red local de Hyperledger Fabric. Esta red de prueba de canal único se crea automáticamente al instalar Blockchain App Builder.

El comando ochain run de Blockchain App Builder inicia la red de Hyperledger Fabric y otros servicios, e instala y despliega el código de cadenas por usted.

my-mac:GOProject myname$ ochain run -h
Usage: run [options] [...args]
Run chaincode project locally in debug mode.

Arguments :
[...args] (optional) Chaincode instantiate arguments. Arguments should be space separated.

Options:
-h, --help        output command usage information 
-D, --debug       enable debug logging
-P, --debug-port  (optional) specify debug process port
-b, --build       (optional) rebuild runtime if already exists
-p, --project     (optional) Path to Chaincode project to run. If not specified, it defaults to current directory.  

Examples :
$> ochain run   

Proyectos de token

Para los proyectos de código de cadena de token, debe especificar una lista de administradores con el comando ochain run:
ochain run <adminList array>
La matriz adminList es una matriz de información que especifica los administradores de tokens. La matriz adminList es un parámetro obligatorio al desplegar un proyecto de código de cadena de token por primera vez. Si vuelve a desplegar el proyecto, puede transferir una matriz vacía para el parámetro adminList o puede utilizar el parámetro adminList para agregar administradores de token. Otros desplegadores que no son el primer desplegador deben proporcionar una matriz vacía para el parámetro adminList. La información de parámetros es diferente para tokens fungibles y tokens no fungibles:
  • Para los tokens fungibles que utilizan el estándar Token Taxonomy Framework, los parámetros son org_id y user_id.
  • Para cualquier token que utilice el estándar ERC-1155, los parámetros son orgId y userId.
  • Para los tokens no fungibles que utilizan el estándar ERC-721 y un proyecto TypeScript, los parámetros son orgId y userId.
  • Para los tokens no fungibles que utilizan el estándar ERC-721 y un proyecto Go, los parámetros son OrgId y UserId.

Los siguientes ejemplos son para tokens no fungibles.

Ejemplo de matriz adminList para TypeScript en Mac OSX y Linux:
'[{"userId":"userid", "orgId":"OrgMSPId"}]'
Ejemplo de matriz adminList para Go en Mac OSX y Linux:
'[{"UserId":"userid", "OrgId":"OrgMSPId"}]'
Ejemplo de matriz adminList para TypeScript en Microsoft Windows:
"[{\"userId\":\"userid\", \"orgId\":\"OrgMSPId\"}]"
Ejemplo de matriz adminList para Go en Microsoft Windows:
"[{\"UserId\":\"userid\", \"OrgId\":\"OrgMSPId\"}]"

Para la red local de Hyperledger Fabric, el campo OrgMSPId se fija en el valor Org1MSP.

Si desea ver los logs de depuración, puede transferir la opción --debug al comando. En Windows, utilice el símbolo del sistema en lugar de PowerShell si especifica la opción --debug. Puede ejecutar la red básica y desplegar el código de cadenas en un puerto diferente del predeterminado transfiriendo la opción --port al comando.

Verificando

Los siguientes logs muestran que el código de cadenas se ha instalado y desplegado correctamente.

my-mac:TSProject myname$ ochain run
Recreating orderer.example.com ... done
Recreating ca.example.com ... done
Recreating peer0.org1.example.com ... done
[2020-09-23T18: 04:09.132] [INFO] default -
============ Started Install Chaincode ============
[2020-09-23T18:04:09.193] [INFO] default Chaincode TSProject:l not installed.
[2020-09-23T18:04:09.317] [INFO] default - Successfully sent install Proposal and received ProposalResponse
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.317] [INFO] default -
============ Finished Install Chaincode ============
[2020-09-23T18:04:09.317] [INFO] default - Successfully installed chaincode TSProject
[2020-09-23T18:04:09.318] [INFO] default -
============ started instantiate Chaincode ============
[2020-09-23T18:04:09.366] [INFO] default - Successfully sent Proposal and received ProposalResponse
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction has been committed on peer localhost:7051
[2020-09-23T18:04:11.434] [INFO] default - The chaincode instantiate transaction was valid.
[2020-09-23T18:04:11.435] [INFO] default - Successfully sent transaction to the orderer.
[2020-09-23T18:04:11.435] [INFO] default - Successfully instantiated chaincode TSProject on channel mychannel
[2020-09-23T18:04:11.435] [INFO] default - 
============ Finished instantiate Chaincode ============
[2020-09-23T18:04:11.4351 INFO] default - Successfully instantiated chaincode TSProject on channel mychannel 
INFO (Runtime): Chaincode TSProject installed and ready:
INFO (RunCommand): Chaincode TSProject deployed

Solución de problemas

Puede encontrar los siguientes problemas al ejecutar el proyecto de código de cadenas en una red local.

Faltan permisos de Go
Al instalar el proyecto de código de cadenas Go en la red local, es posible que vea un error similar al siguiente:
My-Mac:GoProj myname$ ochain run
Starting ca.example.com    ... done
Starting orderer.example.com ... done
Starting peer0.orgl.example.com ... done
INFO (Runtime): 2020/06/22 22:57:09 build started

INFO (Runtime): Building ....

INFO (Runtime): go build runtime/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtine/ 
cgo.a: permission denied

ERROR (Runtime): go build runtine/cgo: copying /Users/myname/Library/Caches/go-build/f8/.….….d: open /usr/local/go/pkg/darwin_amd64/runtime/
cgo.a: permission denied

INFO (Runtime): An error occurred while building: exit status 1

Stopping peer0.orgl.exmple.com ... done 
Stopping ca.example.com	... done
Stopping orderer.example.con ... done
Esto se debe a que faltan permisos para Go. Este error solo se ha visto en Mac OS. Se trata de un problema conocido:
Solución: cambie los permisos de $GOROOT y vuelva a intentar ochain run:
sudo chmod -R 777 /usr/local/go
Fallo de despliegue
Debido a un fallo de despliegue, a un despliegue corrupto, a un contenedor peer de Docker lleno o a que el peer de Docker se ha matado en la red local, puede que aparezca un error similar a:
============ Started instantiate Chaincode ============
[2028-19-01T19:25:lO.372] [ERROR] default - Error instantiating Chaincode GollGl on channel mychannel, detailed 
error: Error: error starting container: error starting container: Failed to generate platform-specific docker 
build: Failed to pull hyperledger/fabric-ccenv:latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:latest not found: manifest unknown: manifest unknown [2020-19-01T19:25:10.372] (INFO) default -
============ Finished instantiate Chaincode ============
[2020-19-01119:25:10.372] [ERROR] default - Error: Error instantiating Chaincode Goll01 on channel mychannel, 
detailed error: Error: error starting container: error starting container: Failed to generate platfom-specific 
docker build: Failed to pull hyperledger/fabric-ccenv: latest : API error (404): manifest for hyperledger/ 
fabric-ccenv:lalest not found: manifest unknown: manifest unknown exited: signal: terminated 
INFO: exited: signal: terminated

ERROR: Error in Chaincode deployment
Esto se debe a que un contenedor peer no se puede volver a iniciar correctamente.
Solución: vuelva a intentar el comando ochain run, pero con la opción -b. Esta opción reconstruye el tiempo de ejecución.
ochain run -b
Reconstrucción de entorno requerida
Vuelva a crear el entorno si aparece un error de canal no encontrado o un error similar al siguiente texto:
Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: 
error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Starting ca.example.com ... 
Starting orderer.example.com ... 
Starting orderer.example.com ... error
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Starting ca.example.com ... error
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for orderer.example.com  
Cannot start service orderer.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/config': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
ERROR: for ca.example.com  
Cannot start service ca.example.com: error while creating mount source path '/host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0/node_modules/@oracle/ochain-cli/runtime/network/basic-network/crypto-config/peerOrganizations/org1.example.com/ca': mkdir /host_mnt/c/Users/opc/.vscode/extensions/oracle.oracle-blockchain-1.4.0: operation not permitted
Encountered errors while bringing up the project.
ERROR: Error in Chaincode deployment
Para volver a crear el entorno local, ejecute el siguiente comando:
ochain run -b

Despliegue de su código de cadenas en una red remota de Oracle Blockchain Platform

Después de desplegar y probar el proyecto de código de cadenas en una red local para asegurarse de que funciona según lo diseñado, puede desplegarlo en Oracle Blockchain Platform.

Despliegue de su código de cadenas

Uso: ochain deploy [options] [...args]

Con el comando ochain deploy, se pueden utilizar los siguientes argumentos y opciones:

my-mac:TSProject myname$ ochain deploy -h 
Usage: deploy [options] [...args]
Deploy chaincode project to Oracle Blockchain Platform

Arguments:
     [...args]    (optional) Chaincode instantiate arguments. Arguments should be space separated.
 
Options :
    -h, --help                      output command usage information
    -D, --debug                     enable debug logging
    -P, --project <project>         (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>       (required) A user name that has install chaincode privileges. Contact your administrator for more details.
    -v, --userversion <userversion> (optional) A user-specified chaincode version.
                             If a version isn't specified, for a new chaincode it will start at v1 and then increment to v2, v3, and so on.
                             For an existing chaincode, v1.a will increment to v1.a1, v1 will increment to v2, and v1.0 will increment to v1.1.
    -s --sign <password>            (required) Password to authenticate user.
    -r --url <url>                  (required) URL of the remote OBP instance. Example: https://<blockchain-instance-url>:7443/

Examples:
$> ochain deploy -u <username> -s <password> -r <url of the remote OBP instance> -c <name of the channel>

Introduzca el nombre de usuario y la contraseña de Oracle Identity Cloud Service para un usuario de Oracle Blockchain Platform con los roles ADMIN o REST_CLIENT. Para obtener más información sobre los usuarios y los roles, consulte Configuración de usuarios y roles de aplicación.

Para llamar al código de cadena, solo es necesario el rol REST_CLIENT. Para desplegar o actualizar el código de cadena, el usuario de IDCS también debe tener asignado el rol ADMIN.

Una vez que el código de cadena se haya desplegado correctamente en la instancia remota de Oracle Blockchain Platform, el log mostrará que se han producido los siguientes eventos:
  • Los detalles de Oracle Blockchain Platform se han recuperado correctamente.
  • La lista de peers se ha recuperado correctamente.
  • El proyecto de código de cadenas se ha instalado correctamente.
  • El proyecto de código de cadenas se ha aprobado y confirmado correctamente.
  • El código de cadenas se ha desplegado correctamente en cada peer y canal.

En un entorno con varias organizaciones, para volver a desplegar el código de cadenas en el mismo canal a través de una instancia de participante, utilice la consola para desplegar el código de cadenas.

Actualización del proyecto Chaincode

La actualización del código de cadenas se gestiona automáticamente mediante Blockchain App Builder. Después de realizar cambios en el código de cadenas, vuelva a llamar al comando ochain deploy, que actualizará automáticamente el proyecto. Cuando vuelva a ejecutar el comando ochain deploy, especifique una matriz vacía para el parámetro adminList o utilice el parámetro adminList para agregar administradores de token. Si no es el primer desplegador, debe proporcionar una matriz vacía para el parámetro adminList.

Si la actualización se realiza correctamente, el log mostrará que se han producido los siguientes eventos:
  • Los detalles de Oracle Blockchain Platform se han recuperado correctamente.
  • La lista de peers se ha recuperado correctamente.
  • Se ha realizado una comprobación para determinar si el proyecto de código de cadenas ya está instalado y, de ser así, se ha recuperado la versión.
  • La versión del código de cadenas se actualizó correctamente (por ejemplo, de la versión 1.0 a la 2.0).

En un entorno con varias organizaciones, para actualizar el código de cadenas, utilice la consola y apruebe manualmente el código de cadenas de los participantes.

Empaquete su proyecto Chaincode para el despliegue manual en Oracle Blockchain Platform

Puede empaquetar sus proyectos de código de cadenas para el despliegue manual en Oracle Blockchain Platform Cloud o Enterprise Edition.

Uso: ochain package

El comando package crea un archivo de almacenamiento que contiene sólo los archivos de creación y distribución. Las carpetas binary, libs, node_modules y test del proyecto de código de cadenas no están incluidas. Este archivo de almacenamiento se puede cargar manualmente en Oracle Blockchain Platform para su despliegue.

Debido a los cambios en los requisitos de software, al ejecutar el comando ochain package para el código de cadena TypeScript, se le solicita la fecha de aprovisionamiento de la instancia de Oracle Blockchain Platform para la que desea crear el paquete. El código de cadena TypeScript creado en el creador de aplicaciones de blockchain no es compatible con las versiones anteriores de Oracle Blockchain Platform sin cambios en la infraestructura subyacente. Blockchain App Builder empaqueta la infraestructura de código de cadenas según corresponda en función de su selección.

my-mac:~ myname$ ochain package -h 
Usage: package [options]
Package and archive an Ochain chaincode project 
Options :
    -h, --help             output command usage information
    -D, --debug            enable debug logging
    -p, --project <path>   Path to the Ochain chaincode project to be packaged. If not specified, it defaults to current directory.
    -o, --out <path>       Path to the generated chaincode archive file. If not specified, it defaults to current directory.
About:
This CLI command packages and archives an existing chaincode project 
Examples:
$> ochain package --project <Path to the Ochain chaicode project> —out <Path to the generated chaincode archive file>

Cuando el comando se completa correctamente, se devuelve la ubicación del paquete.

Este comando toma dos argumentos opcionales:
  • --project

    Esta opción define la ubicación del proyecto de código de cadenas de Blockchain App Builder para empaquetar. Si no se especifica, la ubicación toma por defecto el directorio actual.

  • --out

    Esta opción se puede utilizar para proporcionar la ruta de salida del archivo de almacenamiento generado. Si no se especifica, se establece por defecto en el directorio actual.

Por ejemplo:
ochain package -p /Blockchain/DevTools/bp1/CC -o /Blockchain/DevTools/bp1/output

"Your chaincode project has been packaged at /Blockchain/DevTools/bp1/output/CC.zip"