Multi-Blockchains en Ethereum/RSK (1)

Published on Author lopez

Siguiente Post

La implementación de una blockchain incluye la creación, distribución y manejo de bloques como éste:

Un bloque, en Bitcoin, Ethereum o RSK tiene:

  • Un hash único en el sistema
  • Un bloque padre, identificado por un hash
  • Un número de bloque (que es uno más que el número de bloque del padre)
  • Una lista de transacciones

En el caso de Ethereum y RSK, una transacción tiene:

  • Una cuenta enviadora
  • Una cuenta receptora
  • Un valor a transferir
  • Datos adicionales (usados si la cuenta receptora es un contrato inteligente)

Una lista de bloques válidos encadenados forma lo que se llama una blockchain:

En Ethereum/RSK, un bloque también tiene:

  • Bloques tíos (“uncles”)
  • Dificultad asociada al bloque (la dificulta de la prueba de trabajo (“proof of work”) más la suma de las dificultades de los tíos)

De esta forma, la presencia de bloques tíos contribuye a la dificultad del bloque. Y este número suma a la dificultad TOTAL de la blockchain a la que este bloque se agrega. Varios nodos en la red, llamados mineros, generan bloques en la blockchain. Si hay varias alternativas, el algoritmo de consenso distribuido elige la blockchain con mayor dificiltad total:

(en Bitcoin, la blockchain más larga siempre gana; en Ethereum/RSK una blockchain más corta puede ganar a otra más larga si tiene mayor dificultad acumulada total).

Un problema es mantener el estado de todas las cuentas y contratos en el sistema. Cada transacción tiene entonces algo adicional:

  • El hash del estado del mundo

Un  hash que referencia al estado del sistema DESPUES de la ejecución de la transacción. Ese hash es verificado en cada nodo de la red que procesa el bloque y la transacción; de esa manera todos los nodos de la red termina coincidiendo en el resultado del estado del mundo controlando el hash resultante en cada paso. Un estado del mundo se almacena en un trie, una estructura de árbol donde cada nodo tiene un hash asociado dependiendo del contenido de ese nodo. Ver mi trabajo anterior sobre tries en Building a Blockchain (5) Building a Blockchain (12)

El bloque mismo también tiene un hash de estado, representado el estado del mundo LUEGO de la ejecución del bloque. Puede ser DIFERENTE que el estado del mundo luego de la ULTIMA transacción del bloque, porque se admite que al final del bloque se realicen operaciones que alteren el estado, por ejemplo, la asignación de premios a los mineros. Este hash de estado de bloque también es controlado por todos los nodos de la red, para mantener el consenso y validar el bloque.

Un problema es el armado de un bloque, que puede ser un cuello de botella cuando se intenta procesar muchas transacciones (por ejemplo, cientos o miles de transacciones por segundo). Este es el principal caso de uso que inspira esta serie de posts. Sería interesante tener MUCHAS blockchains:

Entonces, una blockchain podría estar dedicada a las transacciones de un contrato/token muy popular, mientras que otra blockchain puede estar dedicada a las transacciones de una nación o región. Sólo de vez en cuando habrá transferencias entre blockchains. Este esquema de cosas no se limita a sólo dos blockchains, se podría manejar muchas más, y tener nodos dedicados a procesar sólo una o dos blockchains. Entonces, en cada nodo se requieren menos recursos para mantener el estado, y el estado global está distribuido en los nodos que atienden a DISTINTAS blockchains. Describo blockchains con esquemas iguales, no Bitcoin vs Ethereum, sino todas Ethereum o todas RSK.

En los próximos posts, describirér los cambios necesarios en Ethereum/RSK para manejar múltiples blockchains en la red.

Nos leemos!

Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez