Una de los retos técnicos principales del ámbito blockchain es el de la escalabilidad, la cual se refiere al desarrollo de tecnologías y protocolos capaces de procesar un mayor número de transacciones dentro de un periodo fijo. Mientras que una red de pago tradicional como la de Visa puede procesar miles de transacciones por segundo, la mayoría de las cadenas de bloques pueden procesar solo un par.

Estamos trabajando en dos soluciones: Las cadenas laterales y un protocolo de DAG de bloques. En este artículo nos adentraremos a la segunda, pues le hemos dedicado un artículo aparte al desarrollo de nuestras cadenas laterales.

¿Qué es DAG?

Las siglas DAG vienen del inglés directed acyclic graph, un grafo acíclico dirigido. La estructura a la extrema izquierda de la imagen a continuación es de un grafo simple compuesto de nodos y las vértices que los conectan. En un grafo dirigido cada conexión tiene una dirección, indicada aquí por las flechas. Un DAG no permite relaciones cíclicas entre nodos como el que se puede apreciar en la parte inferior del grafo dirigido al centro de la imagen.

DAG DAG

Hay dos maneras diferentes de montar un DAG para criptomonedas. Los nodos pueden estar compuestos de transacciones individuales o bien, pueden ser bloques que contengan un número de transacciones. El primer protocolo DAG destacable fue Tangle, desarrollado por IOTA. En el Tangle, cada nodo se compone de una transacción. Cada transacción contiene una referencia a dos transacciones previas y tiene una pequeña prueba de trabajo adjunta.

Horizen está considerando el uso de un protocolo DAG de bloques. Cada nodo del DAG será un bloque, algo similar a la composición de una cadena de bloques. Cada bloque tendrá un encabezado con información importante como la marca de tiempo y referencias a bloques anteriores, así como un grupo de transacciones. La diferencia más marcada a comparación de una cadena es que un bloque del DAG de bloques puede contener referencias a más de uno de sus antecesores. Este permite que la estructura de datos se vuelva bidimensional al compararse a la unidimensionalidad o estructura de datos lineal de una cadena de bloques. De esta manera buscamos cambiar únicamente la forma de la estructura de datos, conservando así el mismo mecanismo de consenso, las pruebas de trabajo, para que la red acuerde el orden del historial de transacciones.

chain DAG chain DAG

Los mineros de un DAG de bloques

Como ya sabrá, hay una entidad llamada minero en una cadena de bloques PoW tradicional, la cual se encarga de asegurar el libro contable con grandes cantidades de poder computacional. Los mineros se ven incentivados a hacer su labor por medio de una recompensa de monedas recién creadas. También en el protocolo del DAG de bloques habrá mineros. Lo que cambiará será en esencial la estructura de datos del registro de transacciones. El mecanismo de consenso empleado por la red, en este caso el de prueba de trabajo, permanecerá intacto.

Una diferencia entre la estructura de recompensas de nuestro DAG a comparación de la cadena de bloques es que no solo recibirá una recompensa el minero que resuelva un bloque, sino también un número determinado de mineros que lo confirmen posteriormente. Esto incentiva a los mineros a referenciar todos los bloques sin referencias. A los bloques recién creados que aún no tienen una referencia en otros bloques se les llama “hojas” del DAG.

El minado en el DAG de bloques de Horizen será similar al minado tradicional con la excepción de que esperamos que en el DAG se minarán más bloques en total con una dificultad general menor, lo cual debería llevar a la descentralización del proceso de minado, pues no será necesario que tantos mineros individuales se unan a grupos de minería.

leaves leaves

Hemos tenido que hacer también una adaptación a la regla de la cadena más larga que emplean las cadenas de bloques para determinar qué bifurcación de la cadena es válida en caso de una separación. En nuestro DAG existe un algoritmo ligeramente más complejo que determina la validez de dos bloques en conflicto con base en cuántas veces se ha confirmado cada bloque. El principio fundamental del consenso de Nakamoto se mantiene; entre más confirmaciones tenga un bloque en el DG, más alta la probabilidad de que sea el válido de un par en conflicto.

Ajustes de dificultad

Modificamos también el algoritmo que determina el ajuste de la dificultad en el caso de nuestro DAG de bloques. La dificultad determina qué tan difícil es crear un nuevo bloque y, en consecuencia, cuántos bloques pueden crearse durante un plazo dado. Generalmente, la dificultad se ajusta comparando el tiempo que les debería tomar a los mineros crear un bloque nuevo con el tiempo que les toma en realidad. Si están creándose bloques con demasiada frecuencia, la dificultad incrementa; si los mineros están tardando demasiado, disminuye.

Planeamos basar el ajuste de dificultad de nuestro DAG de bloques no solo en el tiempo que les toma a los mineros crear bloques nuevos sino también en el tamaño de los bloques más reciente. Que varios bloques lleguen al límite de su tamaño de manera consecutiva es un indicador de mucha actividad en la red, un hecho que les permite a los mineros producir más bloques durante la misma cantidad de tiempo. Como resultado, se pueden procesar más transacciones durante el mismo periodo y el rendimiento general de la red incrementa. Este mecanismo le permite a nuestro DAG manejar dinámicamente la variabilidad de la actividad en la red sin comprometer su seguridad.

El reto principal

Desde una perspectiva ingenieril, el reto principal en el caso de un DAG de bloques como el que hemos propuesto es establecer el orden de todos los bloques. Mientras que el orden de bloques puede solo ser uno en una cadena de bloques linear, en el caso de un DAG debe ser establecido por un grupo de reglas predefinidas. El ordenamiento de bloques en nuestro DAG dependerá de la intersección de los bloques. Una transacción válida puede incluirse en dos bloques válidos diferentes en un DAG. Al analizar este traslape de transacciones en un grupo de bloques puede establecerse un orden final para todo el conjunto.

Resumen

El rendimiento que puede lograr un DAG de bloques nos motivó a hacer realidad este tipo de protocolo dentro del ecosistema Horizen. La mayoría de los libros contables contenidos en un DAG contienen nodos que constan de una transacción, mientras que el nuestro estará compuesto por bloques.

Minar en un DAG de bloques será similar al minado tradicional, con la excepción de algunas adaptaciones en la estructura de recompensas. Adaptamos también ligeramente la regla de la cadena más larga para hacerla funcionar en el contexto de un DAG y diseñamos un algoritmo para determinar la dificultad de minado no solo con base en el tiempo de bloque pero también en el número de transacciones por bloque. Que un bloque alcance su límite de tamaño rápidamente indica mucha actividad en la red, lo cual llevará a una reducción de la dificultad para que se minen más bloques durante el mismo tiempo. El reto principal al diseñar un protocolo de DAG de bloques es el de establecer un orden para todos los bloques, lo cual se logrará prestando atención al traslape de las transacciones incluidas en más de un bloque.