Contenido


Implementar una aplicación de muestra en IBM Blockchain Platform Starter Plan

Utilice la muestra Hyperledger Fabric "fabcar" para empezar a utilizar rápidamente el Starter Plan

Comments

En este tutorial, verá cómo crear una red en IBM Blockchain Platform Starter Plan, cómo instalar un contacto inteligente (chaincode) en un par de la red y cómo ejecutar una aplicación de muestra para invocar el contrato inteligente. También verá cómo se rellena el libro contable compartido y cómo comunicarse con él haciendo llamadas desde una aplicación cliente local para consultar y actualizar el libro contable.

El sitio web de IBM Blockchain Platform Starter Plan es un servicio completamente integrado, preparado para la empresa y que se ejecuta en IBM Cloud. La plataforma está diseñada para acelerar el desarrollo, el gobierno y el funcionamiento de una red empresarial con múltiples instituciones. El Starter Plan está especialmente dirigido a los entornos de pruebas y de desarrollo, en vez de los de producción. Para los escenarios de producción, se debe utilizar el Enterprise Plan.

La aplicación de muestra que utilizaremos en este tutorial es una muestra de Hyperledger Fabric llamada fabcar" y, aunque puede revisar la muestra y ejecutarla localmente en un contenedor de Docker, en este tutorial verá cómo se instala y cómo se ejecuta en IBM Blockchain Platform Starter Plan en IBM Cloud.

Tenga en cuenta que IBM Blockchain Platform se actualiza a menudo, y que las capturas de pantalla de este tutorial pueden no coincidir exactamente con las que usted ve.

Objetivos del aprendizaje

  • Familiarícese con el IBM Blockchain Platform Starter Plan.
  • Cree su primera vez en Starter Plan.
  • Instale el chaincode en un par de la red.
  • Ejecutar una aplicación de muestra para invocar el chaincode.
  • Rellene, consulte y actualice el libro contable compartido.

Tiempo para completar este tutorial

  • Aproximadamente entre 45 y 60 minutos.

Requisitos previos

  • Tendrá que crear una cuenta de IBM Cloud, si no tiene una.
  • Tener instalado git en su máquina local, para que pueda obtener de chaincode muestra de GitHub para implementado.
  • Tener instalado Node.js y npm en su máquina local, para que pueda configurar su aplicación.Actualmente, no es compatible con Node.js v9.x; tiene que usar v8.9.x.
1

Crear una red en IBM Blockchain Platform Starter Plan

  1. Inicie sesión en su cuenta de cuenta de IBM Cloud (o cree una cuenta, si aún no tiene una).
  2. Empezando en la página Construir rápidamente con IBM Blockchain Platform , seleccione Planos de Servicios. Asegúrese de que ha iniciado sesión en su cuenta de IBM Cloudt.

    Introduzca Blockchain-demo como nombre del servicio y, después seleccione Suscripción a Starter Plan y haga clic en Crear.

    Seleccione el nombre del servicio y la región de implementación
    Seleccione el nombre del servicio y la región de implementación
  3. ¡Ahora puede ver "¡Red creada!" . Haga clic en Lanzar en este panel para ver el panel de instrumentos de su red. Red creada
    Red creada
  4. Después de la pantalla de bienvenida "¡Empecemos!". Haga clic en Lo entiendo cuando haya acabado de leer. Pantalla de bienvenida
    Pantalla de bienvenida
  5. Observe en la parte superior izquierda que su red ha recibido un nombre generado. Haga clic en el nombre y cámbielo a fabcar. Haga clic en el nombre y cámbielo
    Haga clic en el nombre y cámbielo
  6. Cuando haya cambiado el nombre, durante unos segundos verá una ventana emergente en la parte superior derecha que le informará que el cambio se hizo correctamente: Indicación de que el cambio se hizo correctamente
    Indicación de que el cambio se hizo correctamente
  7. Sin más, verá que Starter Plan crea una red de trabajo simple para usted. Haga clic en la pestaña Visión general , y podrá ver exactamente lo que se creó automáticamente para usted: Panel Visión general
    Panel Visión general

    La red está formada por dos organizaciones: Empresa A (Org1) y Empresa B (Org2). De forma predeterminada usted inicia sesión como Org1, así que sólo puede ver el servicio Ordenante, que es compartido por ambas organizaciones, junto con una Autoridad de Certificación (AC) y un Par para Org1.

  8. Haga clic en la pestaña Miembros de la izquierda para ver esos miembros de la red con un poco más de detalle: Pestaña Miembros
    Pestaña Miembros
  9. Haga clic en la pestaña Canales de la izquierda, y verá que un canal llamado defaultchannel también ha sido creado: Pestaña Canales
    Pestaña Canales
  10. Para este tutorial, utilizaremos este defaultchannel para simplificar. Haga clic en la fila defaultchannel de la tabla para ver más detalles acerca del canal: Defaultchannel para ver más detalles details
    Defaultchannel para ver más detalles details
  11. Observe que en la cadena mantenida por el canal ya hay un total de 3 bloques. Esos bloques almacenan la información de la configuración inicial. Puede seleccionar cada una de las filas para ver más detalles, si así lo desea.
2

Instale chaincode en el canal

El siguiente paso es implementar el chaincode en el canal. Pero, primero necesita obtener el chaincode de un repositorio de GitHub utilizando git clone.

  1. Asegúrese de que tiene instalado git en su máquina local.
  2. Abra la línea de comando o la ventana de terminal, navegue hasta un directorio adecuado y cree un directorio nuevo llamado fabcar. Navegue hasta el directorio fabcar nuevo y ejecute el siguiente comando para clonar el código de muestra de Fabric:
    git clone
    https://github.com/hyperledger/fabric-samples.git

    Este comando copia el código para todas las muestras de su máquina local. En la Starter Plan UI, seleccione la pestaña Instalar Código de la barra lateral izquierda para ver el panel de "Instalar código":

    Pestaña Instalar Código
    Pestaña Instalar Código
  3. Haga clic en la lista desplegable llamada Elegir-par... y seleccione org1-par1. Ahora, haga clic en el botón Instalar Chaincode. Botón Instalar Chaincode
    Botón Instalar Chaincode
  4. En el diálogo "Instalar chaincode en org1par1", introduzca fabcar para "ID de Chaincode", e introduzca v1 para "Versión de Chaincode".

    Es posible elegir entre implementar la versión de Node.js o la de Golang del chaincode de fabcar. Ambas proporcionan la misma funcionalidad, así que usted decide. Elija Node o Golang para "Tipo de Chaincode."

    Finalmente, en este panel, haga clic en Elegir archivos para seleccionar el origen del chaincode que quiere instalar:

    • Para ver la versión de Go, seleccione el archivo único fabcar.go de chaincode de la carpeta fabric-samples/chaincode/fabcar/go que usted descargó de GitHub. Para ver la versión de Go, seleccione el archivo único fabcar.go
      Para ver la versión de Go, seleccione el archivo único fabcar.go
    • O, para utilizar la versión de Node.js seleccione el archivo fabcar.js y los archivos package.json de la carpeta fabric-samples/chaincode/fabcar/node que usted descargó de GitHub. Para utilizar la versión de Node.js seleccione el archivo fabcar.js y los archivos package.json
      Para utilizar la versión de Node.js seleccione el archivo fabcar.js y los archivos package.json

    Cuando haya elegido, haga clic en el botón Enviar para subir el chaincode al Starter Plan.

  5. Después, tiene que instanciar del chaincode. Haga clic en los tres puntos de la columna Acciones para ver el menú, y elija Instanciar. Instalar Chaincode
    Instalar Chaincode
  6. En el diálogo Instanciar chaincode , no hay argumentos para fabcar ya que no necesita ninguno. Sin embargo, usted tiene que seleccionar defaultchannel de la lista desplegable de Canal y hacer coincidir el "Tipo de Chaincode" con el lenguaje (Node o Golang) del código que subió anteriormente. Luego haga clic en Enviar. Instanciar chaincode
    Instanciar chaincode
  7. Cuando esto acabe, podrá seleccionar la fila fabcar para ver que el chaincode ya está instanciado en defaultchannel: chaincode Instanciado
    chaincode Instanciado
  8. Ahora que el chaincode ha sido instanciado en el canal, seleccione la pestaña lateral Canales y seleccione la fila defaultchannel para ver sus detalles: Seleccione la fila defaultchannel para ver sus detalles
    Seleccione la fila defaultchannel para ver sus detalles

    Ahora puede ver que hay un bloque extra en el canal, que es el registro de la operación instanciada que realizó antes.

  9. Ahora seleccione la pestaña Chaincode en este panel y seleccione la fila fabcar para expandirla. Ahora puede ver dos botones debajo de fabcar:
    • JSON es el archivo que contiene las credenciales y la información de los pares para la red de blockchain.
    • Borrar detiene y borra la instancia del chaincode.
    Seleccione la fila fabcar para expandirla
    Seleccione la fila fabcar para expandirla
  10. Finalmente, haga clic en el botón JSON que se muestra arriba; se abrirá una nueva pestaña. Copie todos los datos que se muestran en esta pestaña en un archivo nuevo que se llame network-profile.json y guarde este archivo en algún lugar de su máquina; tendrá que copiarlo después.
3

Configurar la aplicación para que se ejecute en IBM Blockchain Platform

Las aplicaciones fabcar que usted descargó de GitHub están programadas para utilizar una instancia local de Hyperledger Fabric. Como nosotros utilizamos un Hyperledger Fabric que está ubicado de forma remota en IBM Blockchain Platform, usted tendrá que obtener las versiones nuevas de las aplicaciones de fabcar que se conectarán de forma segura a la plataforma remota a través del archivo de configuración network-profile.json que usted descargó y guardó anteriormente.

Las 4 aplicaciones originales de fabcar se llaman:

  • enrollAdmin.js
  • registerUser.js
  • invoke.js
  • query.js

Obtenga las versiones nuevas de las aplicaciones de fabcar

Las versiones nuevas de esos archivos están en un repositorio de GitHub llamado fabcar-network. Todos esos archivos nuevos acaban con la palabra Red para indicar que esas son versiones nuevas que accederán a fabcar de forma remota:

  • enrollAdminNetwork.js
  • registerUserNetwork.js
  • invokeNetwork.js
  • queryNetwork.js

Otro archivo del repositorio de GitHub es un archivo de configuración, que contiene información adicional necesaria para acceder al chaincode remoto de fabcar. Este archivo se llama:

  • client-profile.json

Para obtener estos archivos, ejecute este comando desde dentro de la carpeta fabric-samples :

git clone https://github.com/m-g-k/fabcar-network.git

Este comando crea una carpeta llamada fabcar-network al mismo nivel que la carpeta fabcar existente.

El siguiente paso es copiar el archivo network-profile.json que usted descargó y guardó antes en la carpeta fabric-samples/fabcar-network/config junto con el archivo client-profile.json existente.

Ejecute npm install

La versión de red de la aplicación cliente de fabcar está escrita en Node.js. Para completar el siguiente paso debe tener instalados Node.js y npm en su máquina local.

  1. Vuelva a la línea de comando o la ventana de terminal y ejecute el comando npm install desde dentro de la carpeta fabric-samples/fabcar-network :
    npm install

    Es posible que en Windows tenga que instalar Windows Build Tools si obtiene errores de construcción:

    npm install --global windows-build-tools

    Ahora ya tiene instalados todos los paquetes de nodos de los requisitos previos para ejecutar la aplicación cliente de fabcar.

Registre un Administrador

Cuando su red se creó en Starter Plan, cada organización registró automáticamente con la Autoridad de Certificación (AC) un usuario Administrador llamado admin . Ahora, tiene que enviar una solicitud de registro a la AC para recuperar el certificado de registro de ese usuario (eCert).

  1. Desde dentro de la carpeta fabric-samples/fabcar-network , ejecute:
    node enrollAdminNetwork.js

    Usted debería ver un resultado como éste:

    > node enrollAdminNetwork.js
    Found organization: org1 and ca name: org1-ca
    Enrolling using enrollmentId: admin and EnrollmentSecret: 2d87ae1b59
    Successfully enrolled admin user "admin" with msp: "org1"
    Assigned the admin user to the fabric client ::{…}

La aplicación enrollAdminNetwork.js crea un par de claves públicas/privadas local en una carpeta que crea llamada hfc-key-store y envía a la AC una Solicitud de Firma de Certificado (CSR) para la org1, para que emita el eCert. El eCert también se almacenará junto con algunos metadatos en la carpeta hfc-key-store . La aplicación obtiene los detalles de la conexión sobre donde están ubicados la AC y el certificado TLS necesario para conectarse a la misma del archivo network-profile.json que usted descargó antes.

Registrar un usuario nuevo

Ahora que tiene el eCert para el usuario administrador, puede registrar e inscribir un usuario nuevo llamado user1 con la AC. La identidad de este usuario será la que usted utilizará para consultar y actualizar el libro contable.

  1. Desde dentro de la carpeta fabric-samples/fabcar-network , ejecute:
    node registerUserNetwork.js

    Usted debería ver un resultado como éste:

    > node registerUserNetwork.js
    Successfully loaded admin from persistence
    Successfully registered "user1" - with secret:gTYshgoNxoLH
    Successfully enrolled member user "user1" with msp: "org1"
    "user1" was successfully registered and enrolled and is ready to interact with the fabric network

Como en el comando anterior, esta aplicación creó un nuevo par de claves públicas/privadas y envió una solicitud CSR a la AC para que emita el eCert para el user1. Si echa un vistazo dentro de la carpeta hlf-key-store , debería ver 6 archivos, 3 para cada identidad.

Inicializar el libro contable

La muestra original de fabcar tiene un script que llama automáticamente a una transacción initledger para que rellene el libro contable con 10 vehículos iniciales para que usted empiece rápidamente. Como nosotros no estamos utilizando este script, tenemos que llamar a esta transacción nosotros mismos. El comando invokeNetwork.js ha sido escrito para llamarla directamente.

  1. Desde dentro de la carpeta fabcar , ejecute:
    node invokeNetwork.js

    Usted debería ver un resultado que acaba como éste:

    …
    Successfully committed the change to the ledger by the peer

Como el chaincode se ejecuta en un contenedor de Docker separado de chaincode, es posible que en su primera utilización tarde algún tiempo para iniciar este contenedor. Si usted obtiene un error de excedido el límite de tiempo o de "ejecución prematura", simplemente intente volver a ejecutar el comando. Si echa un vistazo a Resumen del Canal después de que el comando haya acabado correctamente, verá que ahora hay un bloque extra en el libro contable:

Resumen del Canal
Resumen del Canal

Consultar al libro contable

El comando invokeNetwork.js ya ha rellenado el libro contable con datos de muestra de 10 vehículos, así que vamos a consultar al libro contable para ver los datos. Para hacerlo, ejecute el comando queryNetwork.js , que está configurado para consultar todos los automóviles que existen en el libro contable.

  1. Desde dentro de la carpeta fabcar , ejecute:
    node queryNetwork.js

    Usted debería ver un resultado como éste:

    > node queryNetwork.js
    Successfully loaded user1 from persistence
    Query has completed, checking results
    Response is  
    [{"Key":"CAR0", "Record":{"colour":"blue","make":"Toyota","model":"Prius","owner":"Tomoko"}},
    {"Key":"CAR1", "Record":{"colour":"red","make":"Ford","model":"Mustang","owner":"Brad"}},
    {"Key":"CAR2", "Record":{"colour":"green","make":"Hyundai","model":"Tucson","owner":"Jin Soo"}},
    {"Key":"CAR3", "Record":{"colour":"yellow","make":"Volkswagen","model":"Passat","owner":"Max"}},
    {"Key":"CAR4", "Record":{"colour":"black","make":"Tesla","model":"S","owner":"Adriana"}},
    {"Key":"CAR5", "Record":{"colour":"purple","make":"Peugeot","model":"205","owner":"Michel"}},
    {"Key":"CAR6", "Record":{"colour":"white","make":"Chery","model":"S22L","owner":"Aarav"}},
    {"Key":"CAR7", "Record":{"colour":"violet","make":"Fiat","model":"Punto","owner":"Pari"}},
    {"Key":"CAR8", "Record":{"colour":"indigo","make":"Tata","model":"Nano","owner":"Valeria"}},
    {"Key":"CAR9", "Record":{"colour":"brown","make":"Holden","model":"Barina","owner":"Shotaro"}}]

Actualizar el libro contable

Finalmente, ahora puede actualizar el libro contable. Para hacerlo, tiene que realizar otro sencillo cambio en el comando invokeNetwork.js.

  1. Abra el archivo invokeNetwork.js en el editor que prefiera, como Atom o VSCode. Después, encuentre y edite la variable "request" como se muestra a continuación, para que invoque el chaincode createCar con un conjunto de argumentos que describan el automóvil que se va a crear. La variable "request" cambiada se debería parecer a esto:
    var request = {
      chaincodeId: 'fabcar',
      fcn: 'createCar',
      args: ['CAR10', 'Honda', 'Accord', 'Black', 'Dave'],
      txId: tx_id
    };
  2. Guarde el archivo y vuelva a ejecutar el comando editado con node invokeNetwork.js. El resultado esperado es:

    …
    Successfully committed the change to the ledger by the peer.

    Ahora se puede experimentar creando automóviles nuevos, con nombres y propietarios diferentes, en el libro contable. Si echa un vistazo al Resumen del Canal, podrá ver que se añadieron nuevos bloques cuando creó los automóviles nuevos.

  3. Para cambiar el propietario de un vehículo, utilice la transacción changeCarOwner para cambiar la variable "request" de invokeNetwork.js. Por ejemplo:
    var request = {
      chaincodeId: 'fabcar',
      fcn: 'changeCarOwner',
      args: ['CAR10', 'MGK'],
      txId: tx_id
    };

    Guarde el archivo y vuelva a ejecutar el comando con node invokeNetwork.js. El resultado esperado es:

    …
    Successfully committed the change to the ledger by the peer

    Se puede ver el propietario actualizado en el libro contable volviendo a ejecutar el comando queryNetwork.js . Se puede ver que el propietario de CAR10 ha cambiado de "Dave" a "MGK.

    Si quiere hacer una consulta para un único automóvil en vez de para todos ellos, haga este cambio a la variable "request" del comando queryNetwork.js y vuelva a ejecutarlo:

    const request = {
      chaincodeId: 'fabcar',
      fcn: 'queryCar',
      args: ['CAR10']
    };

    Ahora debería ver la información para un único automóvil:

    > node queryNetwork.js
    Successfully loaded user1 from persistence
    Query has completed, checking results
    Response is 
    {"colour":"Black","make":"Honda","model":"Accord","owner":"MGK"}

Conclusión

Ahora tiene una red que se ejecuta en IBM Blockchain Platform, con un chaincode de muestra implementado en un par e instanciado en un canal. También tiene una aplicación en ejecución con la que puede trabajar fácilmente en el entorno local. Ha rellenado el libro contable con datos de muestra y su aplicación ahora se puede comunicar con (consultar y actualizar) el blockchain de IBM Blockchain Platform. ¡Aproveche el proceso de blockchain!

Agradecimientos

Los autores agradecen a Anthony O'Dowd del equipo IBM Blockchain Labs Global Engagement por su experta orientación y soporte durante el desarrollo de este tutorial.

Siguientes pasos

  • Ahora que ha implementado la muestra de "fabcar" de Hyperledger Fabric, aprenda cómo crear redes empresariales desde cero con Hyperledger Composer en nuestra popular serie, Aspectos básicos de Hyperledger Composer, de Steve Perry.
     
  • Manténgase al tanto con la Blockchain Newsletter para desarrolladores. Vea la función edición actual y suscríbase.
     
  • Eche un vistazo a los muchos patrones de código, que brindan hojas de ruta para solucionar problemas complejos con la tecnología blockchain, y que incluyen diagramas arquitectónicos, repos de código y lecturas adicionales.
     
  • Pásese por el Centro de Desarrollo de Blockchain. Es el lugar para obtener tutoriales y herramientas gratuitas, además de código y soporte de la comunidad, para desarrollar implementar soluciones blockchain para las empresas.

Recursos para Descargar


Comentarios

Inicie Sesión o Regístrese para agregar comentarios.

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=Cloud computing
ArticleID=1063957
ArticleTitle=Implementar una aplicación de muestra en IBM Blockchain Platform Starter Plan
publish-date=12142018