Guía Completa de Hyperledger Fabric
Guía Completa de Hyperledger Fabric
Ledger (Libro Mayor): Cada peer mantiene una copia del ledger, que
consta de dos partes: la blockchain y el estado mundial (world state). La
blockchain almacena todas las transacciones en bloques, mientras que el
estado mundial es una base de datos que contiene el estado actual de
todos los activos.
Hyperledger Fabric 1
4. Channel (Canal)
Define qué firmas son necesarias para validar una transacción. Por
ejemplo, una política puede requerir que al menos tres organizaciones
diferentes endosen una transacción antes de que sea válida.
Arquitectura Detallada
1. Cliente
2. Proceso de Transacción
Hyperledger Fabric 2
1. Propuesta de Transacción
2. Endoso de Transacción
3. Ordenación de Transacciones
Hyperledger Fabric 3
En Hyperledger Fabric, una transacción comienza cuando un cliente envía una
propuesta de transacción a los nodos de la red. Estos nodos, conocidos como
peers, ejecutan la transacción propuesta contra el chaincode (contrato inteligente)
para generar un conjunto de resultados, que incluye un valor de respuesta, un
conjunto de lectura y un conjunto de escritura. Estos últimos son pares clave-
valor que representan el activo a crear o actualizar1.
Los peers que respaldan la transacción, llamados endorsing peers, verifican que
la propuesta de transacción sea válida y esté bien formada. También se aseguran
de que el cliente esté autorizado para realizar la operación propuesta en el canal.
Una vez que los endorsing peers han ejecutado y respaldado la transacción, la
propuesta se envía al servicio de ordenamiento, que agrupa las transacciones
respaldadas en bloques. Luego, estos bloques se distribuyen a todos los peers en
el canal, donde se aplican las transacciones al libro mayor, actualizando el estado
del sistema
Características Clave
Modularidad: Los componentes de Hyperledger Fabric (como el MSP, el
ordener y los peers) son modulares y se pueden configurar y actualizar
independientemente.
Peers
Un elemento fundamental de una red de blockchain de Hyperledger Fabric es el
conjunto de nodos pares (peers). Los pares son fundamentales porque gestionan
Hyperledger Fabric 4
los libros de contabilidad (ledgers) y los contratos inteligentes (smart contracts). A
partir de Hyperledger Fabric v2.4, los peers también gestionan las propuestas de
transacción y los endosos ejecutando el Fabric Gateway service.
Una red de blockchain de Fabric (arriba) está compuesta por pares (peers, nodos
no ordenadores), cada uno de los cuales almacena y gestiona copias de libros de
contabilidad (ledgers) y contratos inteligentes (smart contracts). En este ejemplo,
la red de Fabric N consiste en los pares P1, P2 y P3, cada uno de los cuales
mantiene su propia instancia del libro de contabilidad distribuido L1. P1, P2 y P3
invocan el mismo chaincode, S1, para acceder a sus respectivas copias del libro
de contabilidad distribuido.
Los peers son un elemento flexible y redundante que puede ser creado, iniciado,
detenido, reconfigurado y eliminado. Los pares exponen un conjunto de APIs que
permiten a las aplicaciones de cliente interactuar con los servicios que
proporcionan los pares, en particular el servicio Fabric Gateway.
Hyperledger Fabric 5
Terminología de Chaincode
Fabric implementa contratos inteligentes a través de un tipo de lógica llamada
chaincode, que es código que accede al libro de contabilidad (ledger), y que se
escribe utilizando las APIs de chaincode.
Hyperledger Fabric 6
interactuar con un peer para acceder a estos recursos. Es por eso que los peers
se consideran los bloques de construcción fundamentales de una red de Fabric.
Un peer que aloja múltiples libros de contabilidad (ledgers) (arriba). Los peers
alojan uno o más libros de contabilidad y los chaincodes que acceden a ellos. En
este ejemplo, el par P1 aloja los libros de contabilidad L1 y L2. El libro de
contabilidad L1 se accede utilizando el chaincode S1; el libro de contabilidad L2
puede ser accedido utilizando tanto el chaincode S1 como el S2.
Los chaincodes instalados en un peer pueden consultar o actualizar (escribir en)
un libro de contabilidad. Tenga en cuenta que los peers también alojan
chaincodes de sistema especiales que están relacionados con la configuración
general de la red de Fabric.
Múltiples Chaincodes
Hyperledger Fabric 7
Un chaincode se instancia en un único canal. Cada canal (y libro de contabilidad)
puede tener múltiples chaincodes que interactúan con él.
Aplicaciones y Peers
Ahora vamos a mostrar cómo las aplicaciones de cliente interactúan con los
peers, y más específicamente, con el servicio de Puerta de Enlace de Fabric
Hyperledger Fabric 8
(Fabric Gateway Service) que se ejecuta en los peers, para acceder al libro de
contabilidad (ledger). Las consultas de libro de contabilidad implican un diálogo
simple entre una aplicación y un peer, mientras que las actualizaciones de libro de
contabilidad (escrituras) implican pasos adicionales.
Atención: Las tres fases de transacción que siguen explican los métodos internos
de cómo Fabric gestiona las transacciones. Los SDK de Puerta de Enlace de
Fabric implementan estas fases sin problemas; los desarrolladores solo necesitan
usar un SDK de Puerta de Enlace (1.x).
Hyperledger Fabric 9
La fase 1 de una actualización de libro de contabilidad (ledger) (escritura) consiste
en la presentación, ejecución y endoso de la propuesta de transacción:
a) Propuesta de transacción — La aplicación de cliente (A1) envía una propuesta
de transacción firmada conectándose al servicio de puerta de enlace en P1. A1
debe delegar la selección de organizaciones de endoso al servicio de puerta de
enlace o identificar explícitamente las organizaciones requeridas para el endoso.
Hyperledger Fabric 10
Transaction Validation and Commitment
Peers y Canales
Vale la pena dedicar tiempo a comprender cómo interactúan entre sí los peers y
las aplicaciones en un canal, un mecanismo mediante el cual los componentes
dentro de una red blockchain de Fabric se comunican y realizan transacciones de
forma privada.
Los componentes del canal incluyen nodos peers, nodos orders y aplicaciones, y
al unirse a un canal, acuerdan colaborar para gestionar y compartir copias
Hyperledger Fabric 11
idénticas del libro de contabilidad (ledger) de forma colectiva. Conceptualmente,
se pueden comparar los canales con grupos de amigos; una persona puede tener
varios grupos de amigos, y cada grupo participa en diferentes actividades. Estos
grupos pueden ser completamente separados (un grupo de amigos del trabajo en
comparación con un grupo de amigos del hobby), o puede haber cierta
membresía cruzada entre ellos. Sin embargo, cada grupo de amigos es una
entidad propia, con reglas específicas (o expectativas) que establecen y
mantienen la membresía.
Hyperledger Fabric 12
Los peers y las organizaciones
Ahora que comprendes los pares y su relación con los libros contables, los
chaincodes y los canales, podrás ver cómo múltiples organizaciones se unen para
formar una red blockchain.
Las redes blockchain de Fabric son administradas por una colección de
organizaciones en lugar de una sola organización. Los pares son fundamentales
para la construcción de este tipo de red distribuida porque son propiedad de —y
son los puntos de conexión de red para— estas organizaciones.
Hyperledger Fabric 13
proporcionan otros recursos, como chaincode y nodos de servicio de
ordenamiento. Aquí hay un principio en acción: la red literalmente no existe sin
que las organizaciones contribuyan con sus recursos individuales a la red
colectiva. Además, la red crece a medida que las organizaciones colaboradoras
proporcionan recursos, aumentando la resiliencia y seguridad de la red.
Puedes ver que (aparte del servicio de ordenamiento, hasta cierto punto) no hay
recursos centralizados; en el diagrama anterior, la red N no existiría si las
organizaciones no contribuyeran con sus pares y otros recursos. Además, la red
no depende de ninguna organización individual; continúa existiendo a pesar de las
salidas siempre que su membresía cumpla con los requisitos autodefinidos de la
red. Esto está en el corazón de lo que significa que una red sea descentralizada;
todas las organizaciones miembro comparten y contribuyen de manera equitativa.
Hyperledger Fabric 14
Los ordenadores y las tres fases
Anteriormente, en el tema de Aplicaciones y Peers, vimos cómo una aplicación
cliente que solicita una actualización del libro contable inicia un proceso de tres
fases que, con la ayuda del servicio de puerta de enlace de Fabric, asegura que
todos los peers en una red de Fabric mantengan copias del libro contable actuales
y consistentes. Como se describió, también están involucrados los ordenadores;
las siguientes secciones examinan más de cerca el proceso de tres fases desde la
perspectiva de los nodos ordenadores y los pares (es decir, el servicio de
ordenación y el servicio de puerta de enlace).
Propuesta de Transacción
La Fase 1 del flujo de trabajo de transacciones implica una interacción entre una
aplicación cliente, peers y orders. En la Fase 1, la aplicación cliente inicia una
solicitud al servicio de puerta de enlace de Fabric para evaluar una propuesta de
transacción.
El peer objetivo, seleccionado por la aplicación cliente, ejecuta la transacción
invocando el chaincode; este paso puede describirse como la simulación de la
transacción, ya que ejecuta la transacción sin ningún efecto en el libro contable.
Luego, el peer devuelve su resultado de transacción al cliente.
El servicio de puerta de enlace también reenvía la propuesta de transacción a los
peers que respaldan requeridos (según las políticas de respaldo), que también
ejecutan la transacción y devuelven sus resultados al peer. El servicio de puerta
de enlace recopila todas las respuestas y, si satisfacen colectivamente las
políticas de respaldo, envía la transacción al servicio de ordenación.
Hyperledger Fabric 15
Este respaldo puede utilizarse posteriormente para demostrar que el par de esta
organización generó una respuesta particular.
Hyperledger Fabric 16
Un nodo ordenante distribuye bloques ordenados a los peers para su validación y
compromiso. En el ejemplo anterior, el nodo ordenante O1 distribuye el bloque B2
a los peers P1 y P2. El peer P1 procesa el bloque B2, resultando en un nuevo
bloque agregado al ledger L1 en P1. Paralelamente, el peer P2 procesa el bloque
B2, resultando en un nuevo bloque agregado al ledger L1 en P2. Una vez
completado, el ledger L1 ha sido actualizado consistentemente en los peers P1 y
P2, y el servicio de gateway informa a las aplicaciones relevantes que la
transacción ha sido comprometida.
La fase 3 comienza con el nodo ordenante distribuyendo bloques a todos los
peers conectados a él. Los peers están conectados a los nodos ordenantes en
canales de tal manera que, cuando se genera un nuevo bloque, todos los peers
conectados al nodo ordenante recibirán una copia del nuevo bloque. Cada peer
procesará este bloque de manera independiente, pero exactamente de la misma
forma que cualquier otro peer en el canal. De esta manera, veremos que el ledger
puede mantenerse consistente.
También vale la pena notar que no todos los peers necesitan estar conectados a
un nodo ordenante: los peers pueden distribuir bloques a otros peers utilizando el
protocolo gossip, quienes también pueden procesarlos de manera independiente.
Al recibir un bloque, un peer procesará cada transacción en la secuencia
especificada en el bloque. Para cada transacción, el peer verificará que la
transacción haya sido respaldada por las organizaciones requeridas de acuerdo
con las políticas de respaldo para el chaincode que generó la transacción. Por
ejemplo, algunas transacciones pueden necesitar ser respaldadas por una sola
organización, mientras que otras pueden requerir múltiples respaldos para ser
Hyperledger Fabric 17
válidas. Este proceso de validación verifica que todas las organizaciones
relevantes hayan generado el mismo resultado.
Resumen de la Fase 3
En resumen, la fase 3 ve los bloques de transacciones, que son generados por el
orderer, validados y aplicados consistentemente al ledger. El orden estricto de las
transacciones en bloques permite que cada peer valide que las actualizaciones de
las transacciones se apliquen consistentemente a lo largo del canal.
Ordenadores y Consenso
Todo este proceso de flujo de trabajo de transacciones se denomina consenso,
porque los peers deben llegar colectivamente a un acuerdo sobre el orden y el
contenido de las transacciones, con la mediación de los ordenadores. El consenso
es un proceso de varios pasos y las actualizaciones del ledger solo ocurren
cuando el proceso se completa con éxito, lo cual puede suceder en momentos
ligeramente diferentes en diferentes peers. Piensa en los ordenadores como
Hyperledger Fabric 18
nodos que secuencian y distribuyen las actualizaciones propuestas del ledger
para que los peers las respalden y las agreguen al ledger.
Ledger
What is a Ledger?
Hyperledger Fabric 19
y débitos que lo determinaron. Este es un ejemplo de la vida real de un libro
mayor: un estado (tu saldo bancario) y un conjunto de transacciones ordenadas
(créditos y débitos) que lo determinan. Hyperledger Fabric se inspira en estas
mismas dos preocupaciones: presentar el valor actual de un conjunto de estados
de libros mayores y capturar la historia de las transacciones que determinaron
estos estados.
El Libro Mayor
The Ledger
Hyperledger Fabric 20
En primer lugar, está el estado del mundo (world state), una base de datos que
contiene los valores actuales de un conjunto de estados del libro mayor. El estado
del mundo facilita que un programa acceda directamente al valor actual de un
estado en lugar de tener que calcularlo al recorrer todo el registro de
transacciones. Los estados del libro mayor se expresan, por defecto, como pares
clave-valor, y veremos más adelante cómo Hyperledger Fabric proporciona
flexibilidad en este sentido. El estado del mundo puede cambiar con frecuencia,
ya que los estados pueden crearse, actualizarse y eliminarse.
En segundo lugar, está la cadena de bloques (blockchain), un registro de
transacciones que registra todos los cambios que han resultado en el estado del
mundo actual. Las transacciones se recopilan dentro de bloques que se agregan a
la cadena de bloques, lo que le permite comprender la historia de los cambios que
han dado lugar al estado del mundo actual. La estructura de datos de la cadena
de bloques es muy diferente al estado del mundo porque, una vez escrita, no se
puede modificar; es inmutable.
Hyperledger Fabric 21
Aunque hablamos de un "registro", en realidad hay múltiples copias del mismo en
la red de Hyperledger Fabric. Estas copias se mantienen consistentes entre sí a
través de un proceso llamado consenso, donde todos los nodos de la red
acuerdan y validan los cambios que se realizan en el registro. Este tipo de registro
distribuido se asocia comúnmente con la tecnología de registros distribuidos
(DLT), donde hay una única entidad lógica de registro, pero múltiples copias
físicas distribuidas a lo largo de la red.
Ahora profundizaremos en las estructuras de datos del estado del mundo y la
cadena de bloques para comprender mejor cómo funcionan en Hyperledger
Fabric.
World State
El estado del mundo (World State) en Hyperledger Fabric almacena el valor actual
de los atributos de un objeto comercial como un estado único del registro. Esto es
útil porque los programas generalmente requieren el valor actual de un objeto;
sería engorroso recorrer toda la cadena de bloques para calcular el valor actual
de un objeto; simplemente se obtiene directamente del estado del mundo.
Hyperledger Fabric 22
Un estado del mundo (World State) de un libro mayor contiene dos estados. El
primer estado es: clave=CAR1 y valor=Audi. El segundo estado tiene un valor más
complejo: clave=CAR2 y valor={modelo:BMW, color=rojo, propietario=Jane}.
Ambos estados están en la versión 0.
Hyperledger Fabric 23
para asegurarse de que los estados actuales coincidan con la versión en el
momento del aval. Esto garantiza que el estado del mundo esté cambiando según
lo esperado; que no haya habido una actualización concurrente.
Finalmente, cuando se crea un libro mayor por primera vez, el estado del mundo
está vacío. Debido a que cualquier transacción que represente un cambio válido
en el estado del mundo se registra en la cadena de bloques, significa que el
estado del mundo se puede regenerar a partir de la cadena de bloques en
cualquier momento. Esto puede ser muy conveniente, por ejemplo, el estado del
mundo se genera automáticamente cuando se crea un peer. Además, si un peer
falla anormalmente, el estado del mundo se puede regenerar al reiniciar el peer,
antes de que se acepten transacciones.
Blockchain
Ahora cambiemos nuestra atención del estado del mundo a la cadena de bloques.
Mientras que el estado del mundo contiene un conjunto de hechos relacionados
con el estado actual de un conjunto de objetos comerciales, la cadena de bloques
es un registro histórico de los hechos sobre cómo estos objetos llegaron a sus
estados actuales. La cadena de bloques ha registrado cada versión anterior de
cada estado del libro mayor y cómo ha sido cambiado.
Hyperledger Fabric 24
de bloques "correcta" porque el libro mayor está distribuido en una red de nodos
independientes.
La cadena de bloques siempre se implementa como un archivo, en contraste con
el estado del mundo, que utiliza una base de datos. Esta es una elección de
diseño sensata ya que la estructura de datos de la cadena de bloques está muy
sesgada hacia un conjunto muy pequeño de operaciones simples. Agregar al final
de la cadena de bloques es la operación principal, y la consulta es actualmente
una operación relativamente poco frecuente.
Echemos un vistazo a la estructura de una cadena de bloques un poco más en
detalle.
Una cadena de bloques B contiene bloques B0, B1, B2, B3. B0 es el primer bloque
en la cadena de bloques, el bloque génesis.
En el diagrama anterior, podemos ver que el bloque B2 tiene una data de bloque
D2 que contiene todas sus transacciones: T5, T6, T7.
Lo más importante es que B2 tiene un encabezado de bloque H2, que contiene un
hash criptográfico de todas las transacciones en D2, así como un hash de H1. De
esta manera, los bloques están vinculados de manera inextricable e inmutable
entre sí, ¡lo que el término cadena de bloques captura de manera tan precisa!
Hyperledger Fabric 25
aunque no contiene ninguna transacción de usuario. En su lugar, contiene una
transacción de configuración que contiene el estado inicial del canal de red (no
mostrado). Discutimos el bloque génesis con más detalle cuando tratamos sobre
la red de cadena de bloques y los canales en la documentación.
Blocks
Vamos a echar un vistazo más de cerca a la estructura de un bloque. Consta de
tres secciones
Block Header
Hash Actual del Bloque: (Current Block Hash) El hash de todas las
transacciones contenidas en el bloque actual.
Hash del Encabezado del Bloque Anterior: (Previous Block Header Hash) El
hash del encabezado del bloque anterior.
Hyperledger Fabric 26
Detalles del Encabezado del Bloque. El encabezado H2 del bloque B2 consta del
número de bloque 2, el hash CH2 de los datos del bloque actual D2 y el hash del
encabezado del bloque anterior H1.
Block Data
Block Metadata
Esta sección contiene el certificado y la firma del creador del bloque que se utiliza
para verificar el bloque por los nodos de la red. Posteriormente, el comisor del
bloque agrega un indicador válido/inválido para cada transacción en un mapa de
bits que también reside en los metadatos del bloque, así como un hash de las
Hyperledger Fabric 27
actualizaciones de estado acumulativas hasta e incluyendo ese bloque, para
detectar una bifurcación de estado. A diferencia de los campos de datos y
encabezado del bloque, esta sección no es una entrada para el cálculo del hash
del bloque.
Transactions
Las transacciones representan las acciones fundamentales dentro de una red
blockchain, capturando los cambios en el estado del mundo del libro mayor. Aquí
tienes un resumen de la estructura detallada de los datos del bloque, que alberga
las transacciones dentro de un bloque.
Firma (Signature): Esta sección, ilustrada por S4, contiene una firma
criptográfica creada por la aplicación cliente. Este campo se utiliza para
Hyperledger Fabric 28
verificar que los detalles de la transacción no han sido manipulados, ya
que requiere la clave privada de la aplicación para generarlo.
Respuesta (Response): Esta sección, ilustrada por R4, captura los valores
antes y después del estado del mundo, como un conjunto de lectura y
escritura (RW-set). Es el resultado de un contrato inteligente y, si la
transacción se valida correctamente, se aplicará al libro mayor para
actualizar el estado del mundo.
Hyperledger Fabric 29
valores se implementen de manera eficiente. Las opciones para la base de datos
del estado del mundo actualmente incluyen LevelDB y CouchDB.
LevelDB es el predeterminado y es particularmente apropiado cuando los estados
del libro mayor son pares clave-valor simples. Una base de datos LevelDB está
ubicada junto con el nodo par: está incrustada dentro del mismo proceso del
sistema operativo.
CouchDB es una opción especialmente adecuada cuando los estados del libro
mayor están estructurados como documentos JSON porque CouchDB admite las
consultas ricas y la actualización de tipos de datos más complejos que a menudo
se encuentran en transacciones comerciales. En cuanto a la implementación,
CouchDB se ejecuta en un proceso de sistema operativo separado, pero aún hay
una relación de 1:1 entre un nodo par y una instancia de CouchDB. Todo esto es
invisible para un contrato inteligente. Consulta CouchDB como la StateDatabase
para obtener más información sobre CouchDB.
En LevelDB y CouchDB, vemos un aspecto importante de Hyperledger Fabric: es
enchufable. La base de datos del estado del mundo podría ser un almacén de
datos relacional, o un almacén de gráficos, o una base de datos temporal. Esto
proporciona una gran flexibilidad en los tipos de estados del libro mayor a los que
se puede acceder de manera eficiente, lo que permite que Hyperledger Fabric
aborde muchos problemas diferentes.
Hyperledger Fabric 30
El libro mayor, L, comprende un estado del mundo, W, y una cadena de bloques,
B. W contiene cuatro estados con las claves: ASSET1, ASSET2, ASSET3 y
ASSET4. B contiene dos bloques, 0 y 1. El bloque 1 contiene cuatro transacciones:
T1, T2, T3 y T4.
Podemos ver que el estado del mundo contiene estados que corresponden a
ASSET1, ASSET2, ASSET3 y ASSET4. ASSET1 tiene un valor que indica que es de
color azul con tamaño 5, actualmente propiedad de Tomoko, y podemos ver
estados y valores similares para los otros autos. Además, podemos ver que todos
los estados de los autos tienen el número de versión 0, lo que indica que este es
su número de versión inicial: no han sido actualizados desde que fueron creados.
También podemos ver que la cadena de bloques contiene dos bloques. El bloque
0 es el bloque de génesis, aunque no contiene ninguna transacción relacionada
con los autos. Sin embargo, el bloque 1 contiene transacciones T1, T2, T3, T4 y
estas corresponden a transacciones que crearon los estados iniciales para
ASSET1 a ASSET4 en el estado del mundo. Podemos ver que el bloque 1 está
vinculado al bloque 0.
No hemos mostrado los otros campos en los bloques o transacciones,
específicamente encabezados y hash. Si estás interesado en los detalles precisos
de estos, encontrarás un tema de referencia dedicado en otra parte de la
documentación. Te proporciona un ejemplo completo de un bloque entero con sus
transacciones en detalle glorioso, pero por ahora, has logrado una sólida
comprensión conceptual de un libro mayor de Hyperledger Fabric. ¡Bien hecho!
Hyperledger Fabric 31