En este artículo, te hablaré sobre el DAG (Directed Acyclic Graph, gráfico acíclico dirigido) y su aplicación en los registros distribuidos, y compararemos esto con la tecnología blockchain.

El DAG no es algo nuevo en el mundo de las criptomonedas. Es posible que hayas oído hablar de él como una solución a los problemas de escalabilidad de las blockchains. Pero hoy no hablaremos de escalabilidad, sino de lo que hace que las criptomonedas sean diferentes de todo lo demás: la descentralización, la ausencia de intermediarios y la resistencia a la censura.

También te mostraré que el DAG, en realidad, es más resistente a la censura, y que no hay intermediarios para acceder al registro.

En las blockchains que conocemos, los usuarios no tienen acceso directo al propio registro. Cuando deseas añadir una transacción al registro, debes 'pedir' a un productor de bloques (block producer, también conocido como 'minero') que lo haga. Son los mineros quienes deciden qué transacción añadir al siguiente bloque y cuál no. Solo los mineros tienen acceso exclusivo a los bloques y el derecho de decidir qué transacción aceptar para añadirla al registro.
Los mineros son intermediarios que se interponen entre tú y el registro distribuido.

En la práctica, un número reducido de grupos de mineros controla colectivamente más de la mitad de la capacidad computacional de la red. Para Bitcoin, esto son cuatro grupos, y para Ethereum, dos. En caso de que se confabulen, pueden bloquear cualquier transacción que deseen.

En los últimos años, se han propuesto muchas variaciones de blockchains, que difieren en los principios de selección de los productores de bloques. Pero los productores de bloques como tal no han desaparecido, siguen 'en la barrera': cada transacción debe pasar por un productor de bloques, y si este no la acepta, la transacción, de hecho, no existe.

Este es un problema inevitable en el caso de la blockchain. Y si queremos resolverlo, debemos cambiar radicalmente el diseño y eliminar por completo los bloques y los productores de bloques. En lugar de construir una cadena de bloques, conectaremos las transacciones entre sí, incluyendo en cada transacción los hashes de varias transacciones anteriores. Como resultado, obtendremos una estructura conocida en matemáticas como gráfico acíclico dirigido – DAG.
Ahora todos tienen acceso directo al registro, sin intermediarios. Cuando quieres agregar una transacción al registro, simplemente la agregas. Seleccionas varias transacciones parentales, añades tus datos, firmas y envías tu transacción a la pirámide en la red. Listo. No hay nadie que pueda impedírtelo, por lo que tu transacción ya está en el registro.
Esta es la forma más descentralizada y más resistente a la censura de agregar transacciones al registro sin intermediarios. Porque cualquiera que lo desee simplemente añade sus transacciones al registro, sin pedir permiso a nadie.

DAG se puede considerar la tercera etapa de la evolución de los registros. Primero estaban los registros centralizados, donde una parte controlaba el acceso a ellos. Luego llegaron las blockchain, en las que ya había varios controladores que anotaban las transacciones en el registro. Y, finalmente, en DAG no hay controladores, los usuarios añaden sus transacciones directamente.

Ahora que tenemos tal libertad, no debe conducir al caos. Debemos tener un consenso sobre el estado del registro. Y este consenso, o acuerdo, generalmente significa consenso sobre dos cosas:
- ¿Qué sucedió?
- ¿En qué orden ocurrió?
A la primera pregunta podemos responder fácilmente: tan pronto como se agrega una transacción correctamente creada al registro, ocurrió. Y punto. La información sobre esto puede llegar a todos los participantes en diferentes momentos, pero al final todas las nodos recibirán esta transacción y sabrán que ocurrió.
Si fuera una blockchain, los mineros decidirían qué ocurre. Todo lo que el minero decide incluir en el bloque, eso sucede. Todo lo que no incluye en el bloque, no sucede.
En las blockchain, los mineros también resuelven el segundo problema de consenso: el orden. Se les permite ordenar las transacciones dentro del bloque como deseen.
¿Cómo se determina el orden de las transacciones en DAG?

Solo porque nuestro grafo es dirigido, ya tenemos cierto orden. Cada transacción hace referencia a una o varias anteriores, parentales. Los padres, a su vez, hacen referencia a sus propios padres, y así sucesivamente. Los padres, evidentemente, aparecen antes que las transacciones hijas. Si alguna de las transacciones puede ser alcanzada a través de las relaciones 'padre-hijo', sabemos exactamente el orden entre las transacciones en esta cadena de transacciones.

Pero el orden entre transacciones no siempre se puede determinar solo a partir de la forma del grafo. Por ejemplo, cuando dos transacciones se encuentran en ramas paralelas del grafo.

Para resolver la ambigüedad en tales casos, contamos con lo que llamamos proveedores de orden. También los denominamos 'testigos'. Son usuarios comunes, cuya tarea es enviar continuamente transacciones a la red en un orden, es decir, de tal modo que cada transacción anterior pueda alcanzarse a través de las relaciones 'padre-hijo'. Los proveedores de orden son usuarios de confianza, y toda la red confía en que no violarán esta regla. Para confiar en ellos de manera racional , exigimos que cada proveedor de orden sea una persona o una organización conocida (no anónima) y que tenga algo que perder si incumple las reglas, como su reputación o un negocio basado en la confianza.

Los proveedores de orden son elegidos por los usuarios, y cada usuario incluye una lista de sus proveedores de confianza en cada transacción que envía a la red. Esta lista consiste en 12 proveedores. Es un número bastante pequeño, suficiente para que una persona pueda verificar la identidad y reputación de cada uno de ellos, y suficiente para que la red continúe funcionando en caso de problemas inevitables con una minoría de proveedores de orden.
Esta lista de proveedores varía de usuario a usuario, pero las listas de transacciones adyacentes pueden diferir como máximo en un proveedor.

Ahora que tenemos proveedores de orden, podemos destacar sus transacciones en el DAG y ordenar todas las demás transacciones en torno al orden que ellos han creado. Existe la posibilidad de crear dicho algoritmo (ver para detalles técnicos).
Pero el orden en toda la red no puede definirse de inmediato, necesitamos tiempo para que los proveedores de orden envíen suficiente cantidad de sus transacciones para asegurarnos del orden final de las transacciones anteriores.
Y, dado que el orden se determina únicamente por las posiciones de las transacciones de los proveedores en el DAG, todas las nodos de la red tarde o temprano recibirán todas las transacciones y llegarán a la misma conclusión respecto al orden de las transacciones.

Así que tenemos un consenso sobre lo que consideramos que ha sucedido: cualquier transacción que haya entrado en el DAG ha ocurrido. También tenemos consenso sobre el orden de los eventos: esto es visible a partir de las relaciones parentales de las transacciones, o se deduce del orden de las transacciones enviadas por los proveedores de orden. Por lo tanto, tenemos consenso.

Este tipo de consenso lo tenemos en Obyte. A pesar de que el acceso al registro de Obyte es completamente descentralizado, el consenso sobre el orden de las transacciones todavía es centralizado, ya que 10 de los 12 proveedores son controlados por el creador (Anton Churyumov), y solo dos de ellos son independientes. Estamos buscando candidatos que deseen convertirse en uno de los proveedores de orden independientes para ayudarnos a descentralizar el establecimiento del orden en el registro.
Recientemente, apareció un tercer candidato independiente que desea establecer y mantener una nodo de proveedor de orden: la Universidad de Nicósia.

Ahora, ¿cómo controlamos los doble gastos (double-spends)?
Según las reglas, al detectar dos transacciones que gastan la misma moneda, la transacción que aparece primero en el orden final de todas las transacciones gana. La segunda se invalida mediante el algoritmo de consenso.

En caso de que sea posible establecer un orden entre dos transacciones que gastan una moneda (por las relaciones entre padre e hijo), todas las nodos rechazan de inmediato tal intento de doble gasto.

Sin embargo, si el orden no es visible a partir de las relaciones parentales entre estas dos transacciones, ambas se aceptan en el registro, y tendremos que esperar el consenso y el establecimiento del orden entre ellas a través de los proveedores de orden. Entonces ganará la transacción más temprana, y la segunda se volverá inválida.

Aunque la segunda transacción se vuelve no válida, sigue estando en el registro, porque ya tiene transacciones posteriores que la referencian, las cuales no violaron nada y no sabían que en el futuro esta transacción se volvería no válida. De lo contrario, tendríamos que eliminar el padre de las buenas transacciones posteriores, lo cual violaría el principio fundamental de la red: cualquier transacción válida es aceptada en el registro.

Esta es una regla muy importante que permite que todo el sistema sea resistente a intentos de censura.
Imaginemos que todos los proveedores de orden se confabulan para intentar 'censurar' una transacción específica. Pueden ignorarla y nunca elegirla como 'padre' para sus transacciones, pero eso no es suficiente, porque esta transacción aún puede ser incluida indirectamente como padre de otra transacción emitida por cualquier usuario de la red que no participe en la conspiración. Con el tiempo, esta transacción obtendrá cada vez más hijos, nietos y bisnietos de usuarios comunes, creciendo como una bola de nieve, y todos los proveedores de orden que se confabularon tendrán que ignorar también estas transacciones. Al final, tendrán que censurar toda la red, lo cual equivale a un sabotaje.

De esta manera, el DAG sigue siendo resistente a la censura, incluso si hay una conspiración de proveedores de orden, superando así al blockchain en resistencia a la censura, donde no podemos hacer nada si los mineros deciden no incluir una de las transacciones. Y esto se deriva de la propiedad principal del DAG: la participación en el registro es completamente independiente y sin intermediarios, y las transacciones son irreversibles.
Fuente: habr.com
