ExonumTM es nuestro marco de blockchain privado de código abierto. Hoy le diremos cómo funciona su algoritmo de consenso.
Imagen: BitfuryPor qué se necesitan algoritmos de consenso
Antes de pasar a la historia de cómo funciona el algoritmo de consenso Exonum
TM , hablemos de por qué estos algoritmos generalmente se necesitan en blockchains.
Blockchain es un sistema distribuido sin un administrador central. Para acordar un nuevo bloque en la red (y, en consecuencia, las transacciones), los participantes de la red
utilizan algoritmos especiales de consenso. La tarea de consenso es ayudar a los pares de la red entre pares a llegar a una opinión común sobre cómo debería ser su nuevo estado, es decir, elegir el siguiente bloque en la cadena de blockchain.
Esto es necesario para proteger la cadena de bloques y la información almacenada en ella de la suplantación de identidad. Por ejemplo, la cadena de bloques basada en Exonum
TM , implementada para los ferrocarriles rusos, registra información sobre operaciones con piezas para automóviles y trenes. La cadena de bloques asegura la confiabilidad de los datos en el bloque, lo que permite a la compañía monitorear la ruta de las piezas de repuesto del proveedor y detectar oportunamente las falsificaciones. Le diremos más sobre este y otros casos más adelante.
¿Qué tareas resolvimos creando el algoritmo de consenso de Exonum?
Al desarrollar el algoritmo de consenso Exonum
TM , fue importante para nosotros resolver el problema del
comportamiento bizantino de los nodos . Por comportamiento bizantino, nos referimos a la actividad maliciosa de los nodos de red individuales. Dichas actividades también pueden incluir situaciones en las que los nodos pierden la conexión con la red o se desconectan.
A mediados de los años 80,
se demostró que para garantizar la estabilidad de un sistema distribuido, debería funcionar en condiciones de sincronismo parcial. Al mismo tiempo, el algoritmo de consenso debe tener los siguientes criterios:
- Vida : debería poder aceptar un nuevo bloque en cualquier momento.
- Consistencia : la base de datos de transacciones en todos los nodos de la red debe ser idéntica.
- Resistencia a la censura : los nodos no deben dar preferencia a ninguna transacción ni ignorarla.
Para una red con un número conocido de participantes, un modelo de algoritmo de consenso resistente al comportamiento del nodo bizantino (
tolerancia a fallas bizantinas , BFT), bajo sincronismo parcial,
permite menos de 1/3 de participantes maliciosos (bizantinos) en la red.
Cómo funciona el algoritmo de consenso de Exonum
Hay tres tipos de nodos en la cadena de bloques Exonum
TM : validadores, auditores y clientes ligeros. Los primeros son participantes directos en el algoritmo de consenso, mientras que los segundos distribuyen la carga en la red y controlan los validadores. En cuanto a los clientes ligeros, solo brindan a los participantes de la red la oportunidad de enviar transacciones a la cadena de bloques. Los clientes y auditores ligeros no están directamente involucrados en el algoritmo de consenso, por lo que no hablaremos de ellos en este material.
La tarea de los validadores es votar por la inclusión de nuevos bloques en la cadena de bloques. Como dijimos anteriormente, la red Exonum
TM puede funcionar de manera estable incluso si un tercio de todos los nodos son bizantinos. En consecuencia, para lograr un consenso, el bloque debe aprobar más de 2/3 de los nodos de la red blockchain. Y esta afirmación puede confirmarse matemáticamente.
Suponga que la red tiene h validadores de nodos honestos (honesto) y f bizantino (defectuoso). Entonces, el número total de validadores se puede representar como N = h + f. Todos los validadores deciden sobre un "ganador" basado en una regla de umbral.
Dice: el número de votos para el ganador debe ser mayor o igual a α * N , donde α es el número en el rango de 0 a 1. Por lo tanto, la mayoría absoluta de votos se logra cuando α> 1/2.
Al final de la votación, cada validador decide independientemente cuál de los dos candidatos ganó. Sin embargo, los validadores pueden no decidir a quién votar si muy pocos validadores envían sus votos al resto. Esto puede suceder si los nodos bizantinos comienzan a enviar votos para diferentes candidatos a miembros honestos de la red, tratando de confundirlos.
Para excluir una situación similar, es necesario observar dos condiciones:
- Los validadores honestos deberían poder tomar decisiones sin la participación de nodos bizantinos. Esta condición está determinada por la propiedad de vida, de la que hablamos anteriormente. Matemáticamente, se expresa por la siguiente desigualdad: h ≥ α * N.
- Un candidato para el cual votó una minoría de validadores honestos no puede superar el umbral en α * N. Esto está dictado por el criterio de consistencia. La condición se expresa de la siguiente manera: [h / 2] + f <α * N, donde [h / 2] es la parte entera del número h / 2.
Como resultado, obtenemos la siguiente cadena de desigualdades: h> 2f, α> 2/3 y N ≥ 3f + 1. De ello se deduce que para confirmar el bloque de transacciones, debe recibir estrictamente más de 2/3 de los votos del validador.
A continuación, hablemos sobre cómo votan los validadores en la cadena de bloques Exonum
TM . En términos generales, el esquema es el siguiente:

El proceso de llegar a un consenso comienza con el hecho de que el nodo principal, que es seleccionado por un algoritmo separado y cambia regularmente, forma una lista de transacciones que deben agregarse a la cadena de bloques (hace una
propuesta ). Esta lista se transmite a través de la red a los nodos del validador.
Los validadores verifican que el mensaje recibido cumpla con el formato de serialización. Si se registra algún error, el nodo ignora completamente el mensaje recibido. Por ejemplo, se ignorará la propuesta de agregar un bloque a la mitad de la cadena de bloques o volver a grabar una transacción existente. Si todo está en orden, comienza la etapa de votación: los nodos validadores votan para agregar el bloque a la cadena de bloques, transmitiendo el mensaje
previo .
Ese nodo, cuya propuesta recibió más de 2/3 aprobaciones de validadores, pierde la oportunidad de votar las propuestas de otros validadores y no puede cambiar su
propuesta . Este estado se llama
prueba de bloqueo .
Después de obtener el número requerido de votos de los validadores, el nodo principal registra las transacciones aprobadas en el bloque y transmite un mensaje especial:
precompromiso . Contiene un
hash del estado actualizado de la cadena de bloques e indica que el nodo está listo para agregar el bloque propuesto a la cadena. En el momento en que la mayoría de los validadores responden con un mensaje de
precompromiso similar (con el mismo hash), el bloque se agrega a la cadena de bloques. Se llega a un consenso y el procedimiento se repite para cada bloque posterior.
Para aumentar la estabilidad del sistema, los validadores intercambian periódicamente dos mensajes más:
Solicitud y
Bloqueo . El primero se genera si los nodos carecen de datos de transacción. El segundo es necesario para transmitir información sobre el bloque de transacción a un nodo que está retrasado en el tiempo (por ejemplo, desconectado), para sincronizar el funcionamiento de toda la red.
Para evaluar las posibilidades del consenso de Exonum
TM , probamos el funcionamiento de la cadena de bloques sobre la base de dos configuraciones: en un centro de datos y en varios centros de datos distribuidos geográficamente. Durante las pruebas, se evaluó el parámetro TPS, el número de transacciones por segundo, para un número diferente de validadores. A continuación, proporcionaremos gráficos de cambios en el rendimiento de la red en blockchains para trabajar con criptomonedas (gráfico negro) y marcas de tiempo (gráfico azul).
TPS en función del número de validadores en el caso de un único centro de datos
TPS en función del número de validadores en el caso de varios centros de datosEn promedio, la cadena de bloques Exonum
TM pudo procesar de 2 a 13 mil transacciones por segundo, dependiendo de la configuración de la red.
Donde ya se usa Exonum
El marco Exonum
TM se usa hoy en una amplia variedad de proyectos. El verano pasado, junto con Technoprom,
creamos un mercado especial para los ferrocarriles rusos. La cadena de bloques Exonum
TM registra operaciones con piezas para trenes y la hoja de datos de cada automóvil. Esto permite rastrear el movimiento de todas las piezas de repuesto de proveedores oficiales y detectar falsificaciones.
También
lanzamos un proyecto educativo de blockchain basado en la Universidad de Synergy. El registro registra y almacena toda la información sobre el rendimiento de los estudiantes: calificaciones, resultados de exámenes y diplomas. Según nuestros colegas, este enfoque elimina la posibilidad de realizar cambios en los documentos educativos y ayuda a ahorrar en el archivo y la certificación.
Incluso sobre la base de Exonum
TM, implementamos una serie de proyectos piloto que aceleraron el desarrollo y lanzamiento de software. Nuestros socios de la organización de ingeniería Aricent han estado probando el marco durante seis meses. El enfoque de blockchain para el desarrollo de software ha aumentado la productividad de los programadores y la velocidad de corrección de errores.
Comenzamos otro proyecto junto con un grupo de compañías médicas. Incluyendo la startup Insillico, donde aplican capacitación profunda para encontrar nuevos medicamentos. ExonumTM será el núcleo del ecosistema de datos del paciente. El sistema simplificará los ensayos clínicos y también ayudará con el análisis de los registros médicos y el ADN de los pacientes. Como resultado, los médicos podrán diagnosticar enfermedades más rápidamente y prescribir un tratamiento más efectivo.
Esperamos que nuestra blockchain encuentre aplicación en otras tareas y en otras industrias. Actualmente estamos trabajando para implementar Exonum TM en sistemas de votación, subasta y gestión de derechos digitales. Las demostraciones de algunas de estas soluciones se pueden encontrar en el sitio web oficial de Exonum TM .