Diseño de la capa de confianza de las humanidades para el mundo digital
En las dos últimas entregas de esta series de blog, hemos discutido los hechos fundamentales sobre las DLTs y hemos introducido la idea de utilizar la confianza del mundo real como mecanismo de protección contra ataques Sybil.
En esta parte nos pondremos un poco más técnicos y discutiremos una de las innovaciones clave de IOTA – la contabilidad de entrada cuádruple (formalmente conocida como el estado del ledger basado en la realidad paralela) – que forma la base del ledger único de IOTA.
La historia de la contabilidad
Para entender las decisiones de diseño detrás de esta forma de contabilidad, vamos a discutir las diferentes formas de contabilidad utilizadas a lo largo de la historia de la humanidad en orden cronológico.
Contabilidad de partida única
La historia de la contabilidad comienza hace decenas de miles de años en la Mesopotamia primitiva. Los avances en la lectura, la escritura y las matemáticas dieron lugar al primer sistema contable: la contabilidad de partida única.
Se trata de una forma de contabilidad muy sencilla con la que la mayoría de la gente está familiarizada y que suele consistir en una lista de entradas con 3 columnas. Los aumentos del saldo suelen aparecer en negro y las disminuciones en rojo (con paréntesis):
Este libro de cuentas es muy fácil de entender y todavía hoy se utiliza esta forma de contabilidad (por ejemplo, para las pequeñas empresas o para llevar el control de los gastos de un hogar).
Su mayor problema es que es muy difícil de auditar o generar informes. Imagine que intenta responder a la pregunta de: «¿Cuánto dinero se ha gastado en alquiler?».
La única forma de responder a esta pregunta sería revisar cada una de las entradas del libro de contabilidad y sumar los valores correspondientes si encajan en una determinada categoría (lo cual es un proceso muy ineficaz y tedioso, sobre todo para los libros de contabilidad de gran tamaño).
Contabilidad por partida doble
A medida que las sociedades se volvieron más complejas, las actividades económicas realizadas por los seres humanos también se hicieron más complejas y surgió la necesidad de un sistema de contabilidad diferente y más eficiente.
En 1494, un monje italiano llamado Luca Pacioli publicó un manuscrito en el que describe una nueva forma de contabilidad: la contabilidad de doble entrada.
Funciona de forma muy similar a la contabilidad de partida simple, pero en lugar de mantener una sola cuenta que represente, por ejemplo, las tenencias de efectivo de una entidad, mantiene varias cuentas diferentes que se separan según su tema y/o su pertenencia a una determinada identidad.
Nota: El conjunto de cuentas relacionadas con una entidad económica se llama libro y el acto de mantener estas cuentas se llama contabilidad.
Cada vez que creamos un asiento en nuestra cuenta de caja, también creamos un asiento correspondiente pero invertido en otra cuenta. Al fin y al cabo, cada aumento en nuestra cuenta de caja corresponde a una disminución en la cuenta de caja de otra persona (y viceversa).
Mirando las diferentes cuentas, resulta muy fácil responder a todo tipo de preguntas sobre el estado operativo de una organización, pero también es más fácil auditar la validez de, por ejemplo, los números de impuestos declarados (ya que los libros de las diferentes organizaciones deben tener números que coincidan).
Esto impulsó enormemente la transparencia y redujo el fraude y la corrupción, lo que permitió que surgieran actores económicos aún mayores.
Contabilidad de triple entrada
Aunque la contabilidad de doble entrada mejoró la capacidad de auditoría de los agentes económicos, cada uno seguía manteniendo sus propios libros por separado y su auditoría era un proceso manual y tedioso que a menudo era propenso a errores y equivocaciones.
La Tecnología Ledger Distribuido (mal llamada solo Tecnología de «contabilidad» Distribuido en Español, pero que para el ejemplo de este blog dejaremos traducido de tal manera) introduce ahora una tercera entrada -la transacción (que se mostraba como una línea discontinua en la imagen anterior)- y la persigue en un libro de contabilidad público y a prueba de manipulaciones. Contiene las instrucciones para modificar el estado del libro mayor. Los nodos que participan en un libro mayor descentralizado acuerdan un estado inicial (la génesis) y luego simplemente aplican las mismas transacciones para llegar al mismo resultado.
Por primera vez en la historia de la humanidad pudimos disponer de una forma completamente abierta y segura de mantener colectivamente un libro mayor compartido, dando lugar al dinero electrónico y al dinero programable.
Aunque las ideas de la contabilidad por partida triple se inspiran en la contabilidad por partida doble, en la que cada transacción modifica los saldos de dos lados (emisor y receptor), utiliza una terminología ligeramente diferente que pretende generalizar los conceptos antes expuestos.
En lugar de seguir los saldos asociados a diferentes cuentas (que sólo eran necesarios para facilitar la lectura del libro de contabilidad para los humanos), el libro de contabilidad sigue los saldos individualmente. Cada vez que un saldo se gasta por una transacción, se marca como gastado y se crean nuevos saldos que son el resultado de la transacción correspondiente.
Los saldos sólo pueden gastarse en total y cada transacción tiene que crear nuevos saldos de acuerdo con un determinado contrato inteligente (por ejemplo, crear exactamente la misma cantidad de fondos que se consumieron). En consecuencia, las transacciones pueden verse como pequeños programas que utilizan los saldos existentes como entradas para crear nuevos saldos como salidas.
Una forma de modelar esto, es como un DAG donde las transacciones son las aristas que conectan todas las salidas que han existido.
La capacidad de gastar una salida suele estar vinculada a alguna condición (por ejemplo, demostrar el acceso a la clave privada de una dirección criptográfica) y el conjunto de salidas no gastadas en la punta de este DAG se considera el estado actual del libro mayor.
Este modelo se denomina modelo UTXO (unspent transaction output) y representa una de las innovaciones clave de Satoshi Nakamoto.
Orden total en el modelo UTXO
Un aspecto fascinante de esta forma de estado del ledger es que no se basa en un orden total de eventos para validar las transacciones y la aplicación de las mismas transacciones conducirá exactamente al mismo estado del ledger, sin importar el orden en que lleguen las transacciones.
Incluso los nodos que ven las transacciones dependientes completamente fuera de orden podrán llegar al mismo estado del libro mayor si simplemente esperan con la ejecución hasta que se conozcan todas las entradas de cada transacción.
Llamamos solidificación a las transacciones cuyas entradas se conocen y al proceso de espera de la información que falta.
La gente podría preguntarse por qué las blockchains dependen de un orden total si su libro mayor (ledger) subyacente no depende de él y la razón es muy sencilla:
El modelo UTXO no tiene una forma significativa de manejar los gastos dobles. Si alguna vez se añadiera un gasto doble al libro de contabilidad, el suministro total aumentaría dando lugar a cosas como una inflación no deseada.
La única forma conocida de tratar este problema es crear una percepción compartida del tiempo que permita a los validadores acordar qué transacciones deben añadirse al estado del libro mayor.
La cadena más larga de Bitcoins gana el consenso es esencialmente un mecanismo de votación sobre la percepción del tiempo – un reloj descentralizado – que muchos expertos suelen afirmar que es el mayor logro de las DLT.
Contabilidad de entrada cuádruple
Sabemos por nuestras discusiones anteriores en la 2ª parte de esta serie de entradas de blog, que la única manera de establecer un orden total es o bien hacer que la red sea sincrónica (ralentizándola artificialmente) o bien limitando la cantidad de validadores a un grupo pequeño.
Teniendo en cuenta que prácticamente todas las compensaciones en las DLTs contemporáneas se reducen a este problema tan fundamental, queremos intentar abordar el problema del doble gasto de una manera completamente diferente.
Una nueva forma de libro mayor
En lugar de intentar evitar que los gastos dobles entren en el libro mayor, queremos diseñar un nuevo tipo de libro mayor que entienda los gastos dobles y que sea capaz de rastrear todas las versiones de estado del libro mayor en conflicto al mismo tiempo.
Para ello, vamos a ampliar el modelo UTXO con otra dimensión (contabilidad de entrada cuádruple) en la que cada transacción y cada salida se asocian a un contenedor que representa una versión específica del estado del libro mayor. Llamamos a este contenedor una rama.
En ausencia de conflictos, todas las transacciones y salidas forman parte de la misma versión del estado del libro mayor, que llamamos rama maestra. Cuando las transacciones se encuentran en conflicto, generan una nueva rama que contiene la propia transacción en conflicto y todas las salidas que crea directa o indirectamente.
Las ramas formadas por transacciones que gastan la misma salida forman parte de un conjunto de conflictos. Dado que las transacciones pueden gastar múltiples salidas, pueden formar parte de múltiples conjuntos de conflictos.
Las salidas dentro de una rama pueden gastarse doblemente en otra ocasión, lo que hace que las ramas formen sub-ramas de forma recursiva. Cada rama almacena una referencia a la rama padre de la que se separó, formando el DAG de ramas con la rama maestra en su raíz. Cada rama hereda recursivamente el estado del libro mayor de sus ancestros.
Los branches (ramas) son conflictivos si ellos mismos o cualquiera de sus ancestros forman parte del mismo conjunto de conflictos.
Al registrar transacciones no conflictivas, heredamos su branch asociado de las salidas que se están utilizando como entradas. Si las transacciones gastan salidas de múltiples branches no conflictivas, sus salidas se registran en un branch agregado que actúa como marcador de posición para la lista de conflictos subyacentes.
Sobre esta estructura de datos se definen ahora algunas reglas que deben cumplir las transacciones para ser consideradas válidas:
- Las transacciones deben crear exactamente la misma cantidad de fondos que consumen.
- Las transacciones nunca pueden gastar salidas de branches conflictivos.
- Las transacciones nunca pueden gastar una salida que ya ha sido gastada por otra transacción en su propio pasado (ver ejemplo).
Con estas 3 reglas podemos asegurar que todas las versiones del estado del libro mayor siempre serán consistentes, manteniendo un suministro total correcto.
Después de haber tomado una decisión sobre un conflicto a través de nuestro mecanismo de consenso de nivel superior, podemos fusionar el branch ganador de nuevo en el Branch maestro y podar los branches conflictivos que fueron rechazados por el consenso.
Todo esto puede parecer muy complejo al principio, pero es sólo una forma eficiente de almacenar todas las diferentes versiones del estado del libro mayor sin tener que almacenar información redundante. Cada salida se almacena una sola vez y almacenar 1000 transacciones conflictivas nos costará casi exactamente la misma cantidad de recursos que almacenar 1000 transacciones honestas (aparte de una sobrecarga de tamaño constante para la entrada adicional en el DAG de la rama).
Para resumir los nuevos conceptos en pocas palabras
- Las ramas nos permiten diferenciar las salidas de las diferentes versiones del estado del libro mayor.
- Los conjuntos de conflictos modelan las relaciones de conflicto entre los branches.
- El DAG de branches nos permite rastrear las dependencias causales entre las diferentes ramas (para heredar el estado del libro mayor y para comprobar los conflictos).
Implicaciones
En lugar de tener que acordar el destino de cada conflicto en el momento de su llegada, podemos trasladar la resolución de conflictos a un nivel superior, convirtiendo el libro mayor en una estructura de datos que simplemente rastrea todas las transiciones de estado que fueron propuestas por sus usuarios (incluso las conflictivas).
Esto nos permite construir una DLT en la que ya no tenemos que tener entidades especiales que protejan el ledger contra las escrituras maliciosas (como los mineros en una blockchain). Cualquiera puede escribir directamente en el libro de contabilidad de forma gratuita simplemente compartiendo su transacción con el resto de la red y todo el mundo puede actualizar el estado de su libro de contabilidad de forma totalmente independiente de los demás.
Todos los nodos que ven la misma información son capaces de construir exactamente las mismas versiones del estado del libro de contabilidad, lo que convierte al libro de contabilidad en un tipo de datos replicado sin conflictos, que puede actualizarse completamente en paralelo y sin ningún tipo de coordinación o ralentización artificial.
Conclusión
Hemos diseñado una nueva forma de libro mayor que nos permite desacoplar el procesamiento de las transacciones y el acto de alcanzar el consenso sobre los conflictos existentes.
Esto resulta no sólo en un diseño de ledger mucho más abierto y democrático que ya no necesita intermediarios que protejan el acto de escribir en el libro mayor, sino que también elimina la necesidad de una coordinación demasiado estricta entre los nodos validadores, lo que nos permitirá posteriormente utilizar los principios de Satoshi sin tener que ralentizar las declaraciones de los validadores, haciendo que el acto de alcanzar el consenso se convierta en un proceso colaborativo en lugar de competitivo.
Una gran parte del trabajo de los últimos años se dedicó a diseñar y conceptualizar esta forma de libro mayor. El diseño que ahora parece muy sencillo y elegante, no siempre lo fue, ya que no teníamos ni idea de cómo sería el mejor diseño. Sin embargo, después de algunas iteraciones, estamos seguros de que ya no será posible simplificar más estos principios.
Lo que demuestra esta forma de libro mayor es que no es necesario establecer un orden total de los acontecimientos para tratar los conflictos.
La única razón por la que las DLTs contemporáneas dependen de un orden total es porque utilizan una estructura de datos que no entiende de conflictos.
Apéndice: Paralelismos con nuestro mundo físico
Si observamos el comportamiento de este libro mayor, vemos muchas similitudes con nuestro universo físico y, aunque no está directamente relacionado con el tema de las DLT, creo que podría ser un tema interesante para discutir.
El tiempo relativista
El tiempo es una palabra que utilizamos para describir una serie de cambios de estado percibidos de un sistema. El estado actual es el ahora, el estado anterior es el pasado y el estado próximo es el futuro.
La misma definición se aplica también a la forma en que los nodos perciben el desarrollo del estado de su libro mayor en nuestro modelo y, de forma similar a nuestro universo, los nodos tienen una percepción relativista del tiempo.
Causalidad
Uno de los conceptos más importantes de la física es que la causalidad no puede ser violada, lo que significa que aunque el tiempo se perciba de forma relativista, todo el mundo percibirá siempre la causa antes que el efecto.
Esto equivale a nuestro concepto de solidez, donde una operación dependiente espera a que se creen sus entradas antes de ser procesada.
El gato de Schrödinger
El gato de Schrödinger es un experimento mental que ilustra una paradoja de la superposición cuántica, en la que un gato hipotético en una caja puede considerarse vivo y muerto al mismo tiempo hasta que se realiza una medición y se abre la caja. En ese momento la superposición colapsa instantáneamente a una única versión específica.
Esto es muy similar a nuestro modelo, en el que dos versiones conflictivas pueden coexistir durante algún tiempo, pero en el momento en que realizamos una medición y recogemos los votos, las dos opciones se resuelven instantáneamente fusionando una única versión ganadora en el branch maestro.
Experimento de la doble rendija
La mayoría de la gente está familiarizada con el experimento de la doble rendija, en el que la proyección de un haz de luz a través de dos rendijas paralelas produce un patrón de interferencia en una pantalla detrás de ella. Éste suele ser uno de los experimentos más sencillos para demostrar que la luz se comporta como una onda e interfiere con un obstáculo.
Si realizamos una medición para determinar por qué rendija pasa cada fotón, ya no vemos un patrón de interferencia, ya que la función de onda del fotón se colapsa y se comporta como una partícula ordinaria. Lo realmente interesante de este experimento es, sin embargo, que esto ocurre incluso si realizamos la medición después de que la partícula haya pasado ya por la rendija.
Realizar una medición en el futuro parece afectar de alguna manera al estado de la misma partícula en el pasado. Hay diferentes interpretaciones de esta observación, pero si asumimos que el universo rastrea su estado al menos de forma similar a como nosotros rastreamos las cosas en nuestro libro de contabilidad, entonces este comportamiento se vuelve fácilmente explicable.
Realizar una medición y comprometerse con una rama específica del libro de contabilidad en algún momento en el futuro también significa que nos comprometemos con todos los padres de esa rama, ya que cada versión tiene que ser siempre causalmente consistente – así que, sí, decidir sobre una sub-rama significa que también tomaremos una decisión sobre todos sus padres, lo que de hecho influye en el pasado.
Borrador cuántico de elección retardada
El experimento del borrador cuántico de elección retardada es una modificación del experimento anteriormente nombrado que modifica la configuración para medir primero el fotón y luego borrar la información sobre la medición de nuevo en un momento posterior.
Curiosamente, en este caso los fotones comienzan a comportarse de nuevo como una onda y de alguna manera se restaura la función de onda previamente colapsada a donde estaba. No es el acto físico de la medición lo que parece marcar la diferencia, sino el acto de darse cuenta, como dijo el físico Carl von Weizsäcker (que trabajó estrechamente con el pionero cuántico Werner Heisenberg) en 1941.
De nuevo, nuestro libro de cuentas funciona de forma muy similar. Si eliminamos los votos para una versión específica y en su lugar emitimos votos para una versión diferente, entonces el estado del libro mayor realizaría algo que llamamos un reorg y una versión que anteriormente parecía decidida podría volver a su estado indeciso.
El acto de borrar la información sobre una medida realizada podría considerarse algo así como el equivalente al comportamiento bizantino.
Conclusión
Ver todas estas similitudes me lleva a creer que tal vez esta forma de rastrear un libro de contabilidad o un ledger es al menos similar a la forma en que el universo rastrea su estado y la primera vez que afirmé esto públicamente fue el 4 de abril de 2020 en una entrevista con un YouTuber alemán.
Los gráficos de evolución multidireccional utilizados por Stephan Wolfram tienen sorprendentes similitudes con la forma en que modelamos nuestro ledger.
Apenas 10 días después Stephen Wolfram publicó una nueva teoría de la física que utiliza exactamente este tipo de mecanismos para modelar la realidad física de nuestro universo y creo que es un hecho muy interesante que dos grupos de investigadores hagan declaraciones muy similares con apenas unos días de diferencia y, lo que es más importante, viniendo de direcciones completamente diferentes.
La gente interesada en las ideas de Stephens debería definitivamente revisar su trabajo.
The Trust Machine — Part3: Quadruple entry accounting