Tutorial de Hyperledger Fabric: Guía completa, Parte 2

La siguiente serie de tutoriales consta de tres artículos que le enseñarán varios aspectos sobre el desarrollo de códigos de cadena de Hyperledger Fabric que van desde operaciones CRUD, protección de datos y pruebas de código de cadena.

Parte 1

Parte 2

Parte 3

Tutorial de Hyperledger Fabric: Guía completa - Parte 2

Una descripción general de la serie:

  • Artículo 1: Desarrollo de chaincode básico y almacenamiento de datos privados en colecciones
  • Artículo 2: consultas de código de cadena avanzadas y la GUI de CouchDB
  • Artículo 3: Un tutorial para probar su código de cadena con MockStub

Requisitos

  • 4GB de RAM (se prefiere más)
  • Docker, Docker-Compose, editor de código (por ejemplo, Visual Studio Code), Git
  • NodeJS versión 8.9+ (la preferida es 8.9.4 – Consejo: cambie su versión con un administrador de versiones como “norte’)
  • Conocimientos básicos de JavaScript

Objetivos

  • Más información sobre CouchDB y su lenguaje de consulta
  • Aprenda el lenguaje de consulta de Mango.
  • Cree consultas avanzadas de código de cadena, pruébelas a través de la GUI de CouchDB e impleméntelas en su código de cadena.

Introducción

En el primer artículo, aprendimos a crear funciones básicas de código de cadena que son capaces de realizar operaciones CRUD en el libro mayor utilizando la plantilla de código abierto proporcionada por TheLedger..

En este segundo tutorial, nos centraremos en la creación de consultas de código encadenado avanzadas, también denominadas consultas enriquecidas, que nos permiten crear consultas más complejas en lugar de simplemente buscar una clave específica..

Empezar 

Asegúrese de tener una copia del código que se puede encontrar en Github michielmulders / hyperledger-fabric-blockgeeks. Se recomienda usar clon de git https://github.com/michielmulders/hyperledger-fabric-blockgeeks.git para crear un clon local del repositorio en su máquina y verifique la segunda parte del tutorial con tutorial de git checkout-2

A continuación, inicie la red con ./scripts/startFabric.sh , Si es nuevo en este tutorial, asegúrese de consultar la sección “Configuración estándar” en el primer artículo para comenzar.

Una vez que su red Hyperledger Fabric haya comenzado, abre este enlacehttp: // localhost: 5984 / _utils / # / _ all_dbs) en su navegador que debería mostrar la GUI de CouchDB.

Sobre CouchDB

En realidad, Hyperledger Fabric admite tanto LevelDB como CouchDB para servir como base de datos de estado, manteniendo el último estado de cada objeto. LevelDB es la base de datos de estado de clave-valor predeterminada incrustada en cada par. CouchDB es una base de datos de estado externa alternativa opcional. Al igual que el almacén de valores-clave de LevelDB, CouchDB puede almacenar cualquier dato binario modelado en código de cadena. Sin embargo, CouchDB es una mejor opción ya que admite el almacenamiento de documentos JSON, lo que permite realizar consultas enriquecidas con los datos del código de cadena, mientras que LevelDB solo admite consultas con las claves..

Según la documentación de Hyperledger Fabric,

CouchDB se ejecuta como un proceso de base de datos separado junto con el par, por lo tanto, hay consideraciones adicionales en términos de configuración, administración, operaciones y especialmente seguridad..”

Por lo tanto, LevelDB ofrece menos funcionalidad, sin embargo, está configurado correctamente, mientras que CouchDB necesita una configuración adicional, como proporcionar un usuario y contraseña de administrador de base de datos o proporcionar una dirección de CouchDB para que el par sepa dónde buscar su estado actual.

El texto estándar que estamos usando contiene una configuración con CouchDB incluido. Creemos nuestra primera consulta enriquecida.

GUI de CouchDB

Cuando haya abierto la GUI, puede encontrar en http: // localhost: 5984 / _utils / # / _ all_dbs, deberías ver la siguiente interfaz.

Tutorial de Hyperledger Fabric: Guía completa - Parte 2

Abramos el mychannel_fabcar (nombre del canal combinado con el nombre del código de cadena) y explore los objetos del automóvil en su interior.

Tutorial de Hyperledger Fabric: Guía completa - Parte 2

A continuación, abra el enlace “Ejecutar una consulta con Mango” para ejecutar nuestra primera consulta. Comencemos con una consulta simple para encontrar todos los objetos Car. Podemos lograr esto buscando el docType “car”.

Tutorial de Hyperledger Fabric: Guía completa - Parte 2

Operadores de Mango Query

1. Operador de campos

El operador “campos” le permite devolver solo campos específicos. Tomemos la consulta del ejemplo anterior y devolvamos solo el color de cada objeto de automóvil.

{

  "selector": {

     "docType": "coche"

  },

  "campos": [

     "color"

  ]

}

2. En operador

El operador $ in le permite buscar valores específicos dentro de un campo. Le permite pasar una matriz de posibles valores que desea hacer coincidir. Tomemos la consulta anterior y devolvamos solo coches morados y violetas..

{

  "selector": {

     "docType": "coche",

     "color": {

        "$ en": [

           "Violeta",

           "púrpura"

        ]

     }

  },

  "campos": [

     "color"

  ]

}

La consulta devolverá tres objetos de automóvil, uno de color “púrpura” y dos de color “violeta”.

Tutorial de Hyperledger Fabric: Guía completa - Parte 2

3. Limitar y omitir operador

Ok, digamos, por ejemplo, que queremos omitir el primer resultado y limitar el resultado a dos autos para que solo tengamos los dos autos violetas del ejemplo anterior. El operador de límite le permite limitar la cantidad de objetos devueltos, mientras que el operador de salto es capaz de mover el cursor selector.

<div style ="fondo: #ffffff; desbordamiento: automático; ancho: automático; borde: gris sólido; ancho del borde: .1em .1em .1em .8em; relleno: .2em .6em;"><pre estilo ="margen: 0; altura de línea: 125%">{

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">  lapso><estilo span ="color de fondo: # fff0f0">&quot; selector&quot; span>: {

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">     lapso><estilo span ="color de fondo: # fff0f0">&quot; docType&quot; span>: <estilo span ="color de fondo: # fff0f0">&quot; coche&quot; span>,

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">     lapso><estilo span ="color de fondo: # fff0f0">&quot; color&quot; span>: {

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">        lapso><estilo span ="color de fondo: # fff0f0">&quot; $ en&quot; span>: [

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">           lapso><estilo span ="color de fondo: # fff0f0">&quot; violeta&quot; span>,

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">           lapso><estilo span ="color de fondo: # fff0f0">&quot; púrpura&quot; span>

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">        lapso>]

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">     lapso>}

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">  lapso>},

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">  lapso><estilo span ="color de fondo: # fff0f0">&quot; campos&quot; span>: [

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">     lapso><estilo span ="color de fondo: # fff0f0">&quot; color&quot; span>

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">  lapso>],

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">  lapso><estilo span ="color de fondo: # fff0f0">&quot; límite&quot; span>: <estilo span ="color: # 0000DD; font-weight: negrita">2span>,

<estilo span ="color: # FF0000; color de fondo: #FFAAAA">  lapso><estilo span ="color de fondo: # fff0f0">&quot; saltar&quot; span>: <estilo span ="color: # 0000DD; font-weight: negrita">1 lapso>

}

pre>div>

4. Operador Regex

Como sugiere el título, es posible pasar regex como una consulta de Mango. Pequeña nota al margen, no se recomienda pasar expresiones de expresiones regulares complejas (como expresiones anidadas) ya que requieren demasiada potencia informática.

Para este ejemplo, solo queremos hacer coincidir los modelos de automóviles que contienen al menos una letra. Esto debería eliminar CAR5 del resultado, ya que el modelo es “205”. Vamos a ver.

{

  "selector": {

     "modelo": {

        "$ regex": "[ARIZONA]+"

     }

  }

}

5. Consultar subdocumentos

Incluso es posible consultar subdocumentos. Imagine un objeto de automóvil modificado donde el campo propietario contiene un objeto que consta de propiedades de usuario.

{

  “modelo”,

  “DocType”,

  …,

“dueño”: {

      “nombre”,

      “edad”,

      “dirección”

  }

}

Mango es bastante flexible con respecto a los subdocumentos, como se muestra a continuación: la consulta busca usuarios que tengan 18 años..

{

   "selector": {

       "propietario edad": 18

   }

}

6. Otros operadores

Existen muchos otros operadores:

  • “$ Gt”: el campo debe ser mayor que el valor X.
  • “$ Lt”: el campo debe ser menor que el valor X.
  • “$ Eq”: el campo debe ser igual al valor X.
  • “$ O”: el valor debe estar en una matriz de valores de búsqueda.
  • “$ Not”: el campo puede no coincidir con el valor X.

Se puede encontrar la implementación completa de operadores de consulta aquí.

Consultas enriquecidas de encadenamiento

Ahora que hemos aprendido a escribir consultas más avanzadas, usemos este nuevo conocimiento en nuestro código de cadena para recuperar datos. Estaremos usando el getQueryResultAsList función del stubHelper que acepta un selector y devuelve los datos requeridos.

Nuevamente, busquemos todos los objetos de automóvil en nuestra base de datos mediante una consulta enriquecida. La función getQueryResultAsList acepta un objeto que contiene la consulta.

async queryAllCars (stubHelper: StubHelper, args: string []): Promise<ninguna> {

       return await stubHelper.getQueryResultAsList ({

           selector: {

               docType: ‘coche’

           }

       });

}

Reiniciemos la red usando ./scripts/startFabric.sh y ejecute el comando docker exec que ejecuta el queryAllCars función en nuestro chaincode.

docker exec cli peer chaincode query -C mychannel -n fabcar -c ‘{” function “:” queryAllCars “,” Args “: [” “]}’

Docker nos devolverá una matriz llena de objetos de automóvil. Como puede ver, no es tan difícil crear consultas enriquecidas en código de cadena.

Que aprendimos?

El lenguaje de consulta de Mango ofrece muchos operadores de consulta que podemos usar para crear consultas más complejas para encontrar datos en nuestra red blockchain. Incluso es posible utilizar expresiones regulares para filtrar datos, sin embargo, limite el uso a consultas de expresiones regulares básicas debido a razones de rendimiento. Además de eso, no es difícil implementar estas consultas enriquecidas en código de cadena ya que StubHelper hace todo el trabajo duro.

Hoja de referencia de código

  1. Una consulta de Mango comienza con un selector que apunta a un campo (s) en el que llamamos a uno o más operadores.

selector: {

     campo: {

         “$ Operador”: …

     }

}

  1. los stubHelper.getQueryResultAsList La función envía la consulta a nuestra red Hyperledger Fabric y devuelve una matriz de resultados..

Lecturas adicionales

Por Michiel Mulders

@michiel_mulders

Mike Owergreen Administrator
Sorry! The Author has not filled his profile.
follow me