La mayoría de las cadenas de bloques funcionan como una única cola. Un minero gana, se añade un bloque y todos esperan al siguiente. Si dos mineros terminan en el mismo instante, solo sobrevive un bloque y el otro se descarta.
ATON se está construyendo de otra manera. Los mineros pueden crear bloques al mismo tiempo, y la cadena los conserva. Eso plantea una pregunta evidente. Los pagos necesitan un único orden. Si dos bloques gastan la misma moneda, solo uno de esos pagos puede contar. Entonces, ¿cómo se convierte una red de bloques en una sola lista con la que todos los nodos están de acuerdo?
Qué es un block-DAG
En una cadena simple, cada bloque apunta a un solo padre. En ATON, cada bloque nuevo apunta a todos los bloques recientes que su minero ha visto y a los que nada más ha apuntado todavía. El resultado no es una línea, sino una red. Los bloques solo apuntan hacia atrás en el tiempo, nunca hacia delante, y nada forma bucles. Esa estructura es lo que se conoce como block-DAG, un grafo dirigido sin ciclos. Puede pensar en ella como una cadena a la que se le permite ser ancha.
La red en sí no es el problema. El problema es leerla. Dos nodos que miran la misma red deben obtener exactamente la misma lista ordenada, usando únicamente los propios bloques. Ese es el trabajo de la regla de ordenación.
Primer paso: encontrar los bloques bien conectados
La regla parte de una observación sencilla sobre el comportamiento honesto. Un minero honesto se entera rápido de los bloques nuevos y apunta a ellos. Así que los bloques honestos, en conjunto, están estrechamente conectados. Cada uno hace referencia a la mayoría de los bloques creados poco antes, y la mayoría de los bloques creados poco después hacen referencia a él.
Un bloque creado de forma aislada tiene otro aspecto. Si alguien mina en privado y publica los bloques tarde, esos bloques apuntan a poco, y poco apunta hacia ellos. Quedan sueltos en el borde de la red.
La regla aprovecha esta diferencia. Selecciona el grupo más grande de bloques que están todos estrechamente conectados entre sí y trata ese grupo como el cuerpo principal de la cadena. Los bloques mal conectados se conservan igualmente, pero se colocan después del cuerpo principal, no dentro de él.
Segundo paso: elegir una columna vertebral dentro del cuerpo principal
Dentro del grupo bien conectado, la regla elige una columna vertebral. Partiendo de los bloques más nuevos y recorriendo hacia atrás, en cada paso prefiere el bloque cuyo pasado conectado pesa más. Esto se parece a la idea conocida de seguir la cadena con más trabajo acumulado. La diferencia es que el peso cuenta toda la red conectada que hay detrás de un bloque, no solo una fina línea de antecesores.
Como la columna vertebral se elige por peso, extenderla con honestidad es la forma más fácil de aportar a ella. Retener bloques no ayuda, porque los bloques retenidos acaban mal conectados y aportan poco peso.
Tercer paso: completar el resto
La columna vertebral ofrece un eje. Cada bloque de la columna incorpora después los bloques a los que hace referencia y que aún no se han colocado, en un orden fijo. Cuando dos bloques son realmente iguales, decide un criterio de desempate basado en el hash del bloque, de modo que todos los nodos resuelven el empate de la misma manera.
El resultado es una única lista. Cada bloque de la red ocupa una posición en ella, y cualquier nodo que tenga los mismos bloques produce la misma lista. Nadie vota, nadie se coordina y no se confía en nadie. El orden es una función pura de los datos.
Qué significa el orden para un pago
Una vez que existe la lista, las transacciones se aplican en el orden de la lista. Si un bloque posterior contiene un pago que entra en conflicto con uno anterior, el pago posterior simplemente se omite. El bloque que lo contenía sigue contando, y el trabajo del minero sigue siendo válido.
Este es el sentido práctico de todo el diseño. El trabajo no se descarta porque dos mineros hayan coincidido en el tiempo. Más bloques por unidad de tiempo significa más espacio para pagos, sin pedir a los mineros que compitan por un único hueco.
Table: Una cadena única y un block-DAG, lado a lado
| Cadena única | Block-DAG | |
|---|---|---|
| Bloques al mismo tiempo | Sobrevive uno | Se conservan todos |
| Cada bloque apunta a | Un padre | Todos los bloques recientes sin referenciar |
| El orden procede de | La posición en la línea | Una regla aplicada a toda la red |
| Pagos en conflicto | Se pierden con su bloque | El posterior se omite, el bloque se queda |
Límites honestos
Ordenar no es lo mismo que dar finalidad. La posición de un bloque muy reciente todavía puede moverse un poco a medida que llegan bloques nuevos y la columna vertebral se asienta. Cuanto más profundo está un bloque, más peso conectado se acumula encima de él, y más difícil resulta moverlo. Cuánto debería esperar para un pago de un importe determinado es una pregunta que responderemos con parámetros publicados, no con una promesa hoy.
Si quiere seguir el trabajo a medida que avanza, la página del proyecto está en aton-chain.com.