Contenido


Implementar una aplicación de muestra en el IBM Blockchain Platform

Esté operativo rápidamente con Enterprise Membership Plan

Comments

En este tutorial vemos cómo crear una red en IBM Blockchain Platform, cómo instalar un contacto inteligente (chaincode) en un canal de la red y cómo implementar una aplicación de muestra en ella. 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.

La IBM Blockchain Platform, previamente conocida como High Security Business Network (HSBN), 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.

La aplicación de muestra que utilizaremos en este tutorial es una muestra de Hyperledger Fabric llamada "fabcar" y, aunque puede ejecutarla de forma local dentro de un contenedor de Docker, en este tutorial verá cómo se instala y cómo se ejecuta en IBM Blockchain Platform en IBM Cloud. Hyperledger es un esfuerzo colaborativo global, de código abierto y organizado por The Linux Foundation, para avanzar en las tecnologías blockchain multiindustria. Hyperledger Fabric es un proyecto de Hyperledger y una implementación de infraestructura cuya arquitectura modular alimenta a IBM Blockchain Platform.

1

Crear una red en IBM Blockchain Platform

Para completar este tutorial, necesitará una cuenta de IBM Cloud y una suscripción de pago del Enterprise Membership Plan de IBM Blockchain Platform, que le permitirá activar una red de blockchain en producción. Tenga en cuenta que la Plataforma se actualiza a menudo, y que las capturas de pantalla de este tutorial pueden no coincidir exactamente con las que usted ve.

  1. Empezando en la página Construir rápidamente con IBM Blockchain Platform , seleccione Planos de Servicios. Luego haga clic en Actualizar (si ya tiene una cuenta de prueba) o Crear (si no tiene una cuenta de prueba). Ahora podrá ver la pantalla de bienvenida. Haga clic en Crear Red para ver el panel de instrumentos de su red. Welcome screen
    Welcome screen
  2. Ahora podrá ver el asistente de Crear Red. Complete el asistente. Create network wizard
    Create network wizard
  3. En la siguiente página es posible invitar a miembros añadiendo el nombre de su institución y su dirección de email. Sin embargo, para este tutorial, no es necesario invitar a ningún miembro; sólo tiene que hacer clic en Siguiente. En la siguiente página es posible aceptar las reglas y las políticas de gobierno predeterminadas haciendo clic en Siguiente. En la última página podrá revisar el resumen de los detalles que ha brindado y podrá hacer clic en Hecho.
  4. Cuando haya acabado verá una página de resumen; haga clic en Ingresar Red para obtener una visión general de su red de blockchain y de los recursos que acaba de crear. The network dashboard page
    The network dashboard page
  5. Haga clic en Añadir Pares en la página de Visión General y añada el número de pares. Para este tutorial, con 2 pares es suficiente. The add peers page
    The add peers page
  6. Los pares ahora aparecerán en la página de Visión General. Added peers on the resources page
    Added peers on the resources page
2

Crear un canal

El siguiente paso es crear un canal llamado "fabcar." Un canal es una agrupación lógica de pares seleccionados de la red de blockchain. El canal permite que los pares asociados con ese canal vean las transacciones de los otros, pero los pares que están fuera del canal no pueden ver esas transacciones. Brinda un nivel de privacidad de las transacciones y de seguridad entre los pares. Cada canal puede tener instanciado el mismo chaincode o diferentes, según sus necesidades empresariales.

  1. En la red de blockchain, haga clic en la pestaña Canales de la izquierda, y seleccione Crear Canal. Ingrese el nombre del canal fabcar y haga clic en Siguiente. The Create a new channel page
    The Create a new channel page
  2. Asigne un rol a cada miembro y haga clic en Siguiente. Asegúrese de que para este paso estén seleccionadas todas las opciones. The select members and set roles subpage
    The select members and set roles subpage
  3. Revise la política de actualización de canales y haga clic en Enviar Solicitud. The review channel update policy subpage
    The review channel update policy subpage
  4. Encontrará una notificación en la pestaña Notificaciones . Seleccione la casilla de verificación Solicitud de Canal y haga clic en Revisar Solicitud. The Notifications tab
    The Notifications tab
  5. Revise la política y los miembros del canal. Haga clic en Aceptar para aceptar la invitación del canal. The channel invitation for fabcar
    The channel invitation for fabcar
  6. En la pestaña Notificaciones , seleccione el canal y haga clic en Enviar Solicitud. The invite was accepted
    The invite was accepted
  7. Seleccione la pestaña Canales y haga clic en Enviar. Join peers to this                     channel
    Join peers to this channel
  8. Haga clic en Unir Pares en la pestaña Canales . List of peers
    List of peers
  9. Seleccione los pares que se deberían unir a este canal. Haga clic en Añadir los Seleccionados. List of peers
    List of peers
  10. Ahora podrá ver que el canal ha sido creado. List of channels
    List of channels
3

Instale chaincode en el canal

Después de crear el canal, el siguiente paso es instalar el chaincode. Utilizaremos el chaincode de la aplicación de muestra "fabcar".

  1. Para obtener el chaincode, siga las instrucciones para "Obtener una Red de Muestra" o clone el git de este repositorio:
    git clone https://github.com/hyperledger/fabric-samples.git
  2. Para instalar el chaincode, seleccione la pestaña de Chaincode , elija un par, y haga clic en Instalar chaincode. Ingrese "fabcar" en el nombre de chaincode, ingrese "v3" en la versión de chaincode, y haga clic en Elegir Archivos para seleccionar el archivo chaincode fabcar.go desde la carpeta fabric-samples/chaincode/fabcar que descargó desde GitHub. Haga clic en Enviar. Install chaincode page
    Install chaincode page
  3. El chaincode ya está instalado en el par. Completed chaincode
    Completed chaincode
  4. El siguiente paso es instanciar el chaincode en un canal llamando al método init del chaincode. Para este paso no se necesitan argumentos, así que puede elegir el canal "fabcar" y dejar vacío el campo de argumentos. Instantiate the chaincode page
    Instantiate the chaincode page
  5. El chaincode instanciado se parecerá a esto: The chaincode list
    The chaincode list
  6. Cuando el chaincode haya sido instanciado en el canal, seleccione la pestaña lateral Canales y elija la opción Chaincode . Entonces podrá ver tres botones bajo fabcar:
    • JSON: Este archivo JSON contiene las credenciales y la información de los pares para la red de blockchain.
    • Registros: Todos los registros de chaincode se imprimen aquí.
    • Borrar: Esto borra/detiene la instancia de chaincode.
    The channel activity and configuration page
    The channel activity and configuration page

    En la carpeta fabric-samples/fabcar, cree una carpeta nueva llamada config. Haga clic en el botón JSON , y se abrirá una pestaña nueva. Copie todos los datos que se muestran en esta pestaña en un archivo nuevo que se llame blockchain_creds.json y guarde este archivo dentro de la carpeta "config".

4

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

Para ejecutar su aplicación en IBM Blockchain Platform, tendrá que hacer algunos cambios en la muestra "fabcar".

Empiece copiando los archivos extractCerts.js y enrollUser.js en la raíz de la carpeta fabric-samples/fabcar de "fabcar".

Ejecute npm install

Ejecute npm install desde dentro de la carpeta de "fabcar":

cd fabric-samples/fabcar
npm install

Es posible que en Windows tenga que instalar Windows Build Tools si obtiene errores:
npm install --global windows-build-tools

Extraer certificados

En IBM Blockchain Platform está activada la Transport Layer Security (TLS), y, por lo tanto, tiene que extraer los certificados TLS que brinda el servicio para establecer una conexión siguiendo estos pasos.

Cree un directorio llamado "network" dentro del directorio "fabcar", y después ejecute extractCerts.js como se muestra a continuación. Esto creará un certificado CA y un certificado de pares en la ruta dada, o de forma predeterminada en la carpeta ./network/tls que está dentro del directorio "fabcar". De forma predeterminada, tomará la información de /config/blockchain_creds.json que está dentro del directorio "fabcar".

node extractCerts.js

o

node extractCerts.js --input= /config/blockchain_creds.json --cert_path=./network/tls

Además de crear los archivos del certificado, este comando imprime un EnrollId, un EnrollSecret y un CA_URL que se van a utilizar en el siguiente paso. También imprime tres URLs que se utilizarán después para inscribir a los usuarios (peer-url, peer-event-url y orderer-url).

Registrar usuarios

Ejecute el siguiente comando con los EnrollId, EnrollSecret y CA_URL de la sección anterior. Generará un certificado en la ruta de la cartera del usuario proporcionado.

node enrollUser.js --wallet_path=./network/creds --user_id=admin --user_secret=secret --ca_url=https://fft-zbcxxx.4.secure.blockchain.ibm.com:15185

Iniciar el chaincode

Antes de poder consultar y actualizar el libro contable, tiene que ejecutar una transacción de configuración para llenar el libro contable con algunos datos de muestra. Haga una copia del archivo "invoke.js" que está en la carpeta fabric-samples/fabcar y llame a la copia "invokeNetwork.js". Asegúrese de que la copia esté en la misma carpeta que el archivo original. Después, realice los siguientes cambios al comando invokeNetwork.js .

  1. Añada el siguiente parámetro require justo debajo de la variable util .
    var fs = require("fs")
  2. Modifique la variable options como se muestra a continuación. Asegúrese de que actualiza los campos peer_url, event-urle orderer-url con los valores que devuelve la ejecución de extractCerts.js anterior.
    var options = {
        wallet_path: path.join(__dirname, './network/creds'),
        user_id: 'admin',
        channel_id: 'fabcar',
        chaincode_id: 'fabcar',
        peer_url: '<peer_url>',
        event_url: '<peer-event-url>',
        orderer_url: '<orderer-url>',
        tls_cert: {
            pem: fs.readFileSync(path.join(__dirname, './network/tls') + '/peer.cert').toString(),
        }
    };
  3. Para activar la TLS, reemplace este código:
    var peerObj = client.newPeer(options.peer_url);

    con:

    var peerObj = client.newPeer(options.peer_url, {
        pem: options.tls_cert.pem
    });
  4. Reemplace este código:
    channel.addOrderer(client.newOrderer(options.orderer_url));

    con:

    channel.addOrderer(client.newOrderer(options.orderer_url, {
        pem: options.tls_cert.pem
    }));
  5. Reemplace este código:
    eh.setPeerAddr(options.event_url);

    con:

    eh.setPeerAddr(options.event_url, {
        pem: options.tls_cert.pem
    });
  6. Finalmente, cambie el valor del campo fcn de la variable request de createCar a initLedger, y haga que args sea una matriz vacía. La variable "request" cambiada ahora se debería parecer a esto:
    var request = {
            targets: targets,
            chaincodeId: options.chaincode_id,
            fcn: 'initLedger',
            args: [''],
            chainId: options.channel_id,
            txId: tx_id
    };
  7. Ahora, guarde el archivo y ejecute el comando nuevo utilizando node invokeNetwork.js. El resultado esperado es:
    …
    Transacción enviada correctamente al ordenante.

Consultar al libro contable

El comando invokeNetwork.js ya ha rellenado el libro contable con algunos datos de muestra, así que vamos a consultar al libro contable para ver los datos. Haga una copia del archivo "query.js" que está en la carpeta fabric-samples/fabcar y llame a la copia "queryNetwork.js". Asegúrese de que la copia esté en la misma carpeta que el archivo original. Después, realice los siguientes cambios al comando queryNetwork.js .

  1. Añada el siguiente parámetro require justo debajo de la variable path .
    var fs = require("fs")
  2. Modifique la variable options como se muestra a continuación. Asegúrese de que actualiza el valor del campo network_url con el valor de peer_url que devolvió la ejecución del extractCerts.js anterior.
    var options = {
        wallet_path: path.join(__dirname, './network/creds'),
        user_id: 'admin',
        channel_id: 'fabcar',
        chaincode_id: 'fabcar',
        network_url: '<peer_url>',
        tls_cert: {
            pem: fs.readFileSync(path.join(__dirname, './network/tls') + '/peer.cert').toString(),
        }
    };
  3. Reemplace este código:
    channel.addPeer(client.newPeer(options.network_url));

    con:

    channel.addPeer(client.newPeer(options.network_url, {
        pem: options.tls_cert.pem
    }));

    Ahora, guarde el archivo y ejecute el comando nuevo utilizando node queryNetwork.js. El resultado esperado es:

    …
    Cuenta de resultados de la consulta =  1
    La respuesta es  [{"Key":"CAR0","Record":{"make":"Toyota","model":"Prius","colour":"blue","owner":"Tomoko"}},{"Key":"CAR1","Record":{"make":"Ford","model":"Mustang","colour":"red","owner":"Brad"}},{"Key":"CAR10","Record":{"make":"","model":"","colour":"","owner":"Tom"}},{"Key":"CAR11","Record":{"make":"Honda","model":"Accord","colour":"Black","owner":"yog"}},{"Key":"CAR12","Record":{"make":"Honda","model":"Accord","colour":"Black","owner":"Tom"}},{"Key":"CAR2","Record":{"make":"Hyundai","model":"Tucson","colour":"green","owner":"JinSoo"}},{"Key":"CAR3","Record":{"make":"Volkswagen","model":"Passat","colour":"yellow","owner":"Max"}},{"Key":"CAR4","Record":{"make":"Tesla","model":"S","colour":"black","owner":"Adriana"}},{"Key":"CAR5","Record":{"make":"Peugeot","model":"205","colour":"purple","owner":"Michel"}},{"Key":"CAR6","Record":{"make":"Chery","model":"S22L","colour":"white","owner":"Aarav"}},{"Key":"CAR7","Record":{"make":"Fiat","model":"Punto","colour":"violet","owner":"Pari"}},{"Key":"CAR8","Record":{"make":"Tata","model":"Nano","colour":"indigo","owner":"Valeria"}},{"Key":"CAR9","Record":{"make":"Holden","model":"Barina","colour":"brown","owner":"Shotaro"}}]

Actualizar el libro contable

Finalmente, vamos a actualizar el libro contable. Para hacerlo, se puede hacer otro sencillo cambio al nuevo comando invokeNetwork.js que usted creó anteriormente.

  1. 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 = {
            targets: targets,
            chaincodeId: options.chaincode_id,
            fcn: 'createCar',
            args: ['CAR11', 'Honda', 'Accord', 'Black', 'Tom'],
            chainId: options.channel_id,
            txId: tx_id
    };
  2. Salve el archivo y ejecute el comando utilizando node invokeNetwork.js. El resultado esperado es:
    …
    Transacción enviada correctamente al ordenante.

    Esto ha creado un vehículo nuevo y su propietario "Tom", y los ha almacenado en el libro contable. Se puede ver el automóvil nuevo en el libro contable volviendo a ejecutar el comando queryNetwork.js . Ahora se puede experimentar creando automóviles nuevos, con nombres y propietarios diferentes, en el libro contable.

  3. Finalmente, puede experimentar con el chaincode changeOwner para cambiar el propietario de un vehículo. Para hacerlo, vuelva a cambiar la variable request de invokeNetwork.js para que se parezca a esto:
    var request = {
            targets: targets,
            chaincodeId: options.chaincode_id,
            fcn: 'changeCarOwner',
            args: ['CAR11', 'MGK'],
            chainId: options.channel_id,
            txId: tx_id
    };
  4. Ahora, salve el archivo y vuelva a ejecutar el comando utilizando node invokeNetwork.js. El resultado esperado es:
    …
    Transacción enviada correctamente al ordenante.
  5. Se puede ver el propietario actualizado en el libro contable volviendo a ejecutar el comando queryNetwork.js . Se puede ver que el propietario ha cambiado de "Tom" a "MGK."
  6. 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: options.chaincode_id,
            txId: transaction_id,
            fcn: 'queryCar',
            args: ['CAR11']
    };

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

    …
    Cuenta de resultados de la consulta =  1
    La respuesta es  {"make":"Honda","model":"Accord","colour":"Black","owner":"MGK"}

Resumen

Ahora tiene una red que se ejecuta en IBM Blockchain Platform, con un chaincode de muestra en un canal de la red y una aplicación en ejecución con la que puede trabajar fácilmente. 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 y a David Gorman del equipo IBM Blockchain Labs Global Engagement por su experta orientación y soporte durante el desarrollo de este tutorial.


Recursos para Descargar


Temas relacionados


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=1056821
ArticleTitle=Implementar una aplicación de muestra en el IBM Blockchain Platform
publish-date=01192018