Escalabilidad de Ethereum: explicación de «sharding», parte I

0

El debate que se ha creado en torno a la escalabilidad de las diferentes cadenas de bloques es uno de los temas más álgidos y controversiales del criptomundo, porque existe una discusión constante en la que los miembros de la comunidad no logran ponerse de acuerdo. Es bien sabido que las grandes cadenas de bloques públicas como Bitcoin o Ethereum gozan de serios problemas de escalabilidad.

Hablando en términos generales, ¿cuáles son los enfoques que la comunidad ha decidido tomar? Existen dos puntos de vista:

  • Por un lado, se propone mejorar la escalabilidad a través de soluciones implementadas fuera de la cadena de bloques —escalamiento de capa 2—, donde algunas transacciones se manejan fuera de la cadena de bloques, como es el caso de Lightning Network.
  • El otro enfoque, más radical, plantea modificar por completo el diseño del protocolo para solucionar los problemas fundamentales. Sin embargo, esta solución representa una inmensa dificultad ya que para implementarla es necesario ejecutar una bifurcación dura.

Esta publicación desglosará el enfoque actual que el equipo principal de desarrolladores de Ethereum está adoptando con respecto a la fragmentación, también expondrá sus limitaciones actuales y las diferentes posibilidades de mejora.

Escalabilidad de Ethereum: explicación de «sharding»

¿Qué es sharding?

Sharding o fragmentación de datos es un tipo de partición que separa las bases de datos muy grandes en porciones más pequeñas, más rápidas y más fáciles de gestionar. Actualmente, cada nodo que ejecuta Ethereum debe procesar cada una de las transacciones que ocurren en la red.

Esta condición proporciona a la cadena de bloques máxima seguridad, teniendo en cuenta que la validación de los datos sucede en cada uno de los bloques y en todos los nodos participantes de la red. Al mismo tiempo, significa que una cadena de bloques es tan rápida como sus nodos individuales. Las transacciones que ocurren en una cadena de bloques se registran y ejecutan en serie, una tras de otra, de una manera lineal, no en forma paralela que sería lo óptimo.

La frecuencia de procesamiento de las transacciones en una cadena de bloques aún deja mucho que desear. Bitcoin procesa 7 tps; Ethereum, 20 tps. En contraste, PayPal puede procesar 193 tps y la red de Visa, alrededor de 1660 tps o más.

El problema de escalabilidad

Este problema tiene que ver con el cumplimiento máximo de dos entre un total de tres propiedades que una cadena de bloques debe tener:

  • Distribución
  • Escalabilidad
  • Seguridad

Por ejemplo, si nuestra cadena de bloques tiene escalabilidad y seguridad, esto quiere decir que es centralizada. Por tanto, podría ser más rápida.

En este caso, Ethereum es distribuido y seguro, pero no es fácilmente escalable. ¿Cómo se podría, dentro de las condiciones actuales, lograr que los tres atributos se cumplan al mismo tiempo?

Una de las soluciones más simples podría ser aumentar el tamaño de lo bloques, en el caso de Ethereum el gas_limit con el fin de aumentar el rendimiento. En teoría, este enfoque es correcto. No obstante, mientras más se aumente el gas_limit, se requerirá de una mayor capacidad informática, dando como resultado la centralización del poder de minado y la elevación de las barreras de entrada al sistema.

Una alternativa más inteligente es la propuesta de la fragmentación de la cadena de bloques, donde se divide el estado de la red en un conjunto de particiones llamadas fragmentos (shards, en inglés) que contienen su propia porción independiente del estado de la red e historial de las transacciones. Bajo este enfoque, ciertos nodos procesan transacciones para ciertos fragmentos solamente, haciendo que el rendimiento global sea mucho mayor si lo comparamos con el modelo vigente en que la cadena principal hace todo el trabajo.

Algunos términos que debemos entender antes de continuar con la explicación de una cadena de bloques fragmentada:

  • Consenso: técnicamente, significa que los nodos acuerdan entre sí el mismo estado de la red.
  • Estado: conjunto completo de información que describe un sistema en un momento dado. Cada transacción produce un nuevo estado. La convención es que la cadena más larga siempre refleja la verdad del estado de la red, debido a que es probable que en ella se haya invertido más trabajo para resolver las complejas operaciones matemáticas.
  • Nodos: componentes individuales que toman una entrada de datos, ejecutan una función y como resultado obtienen una salida de datos.
  • Red: Colección de nodos que están conectados entre sí.
  • Parámetros: reglas que definen la operación de un nodo.
  • Transacción: una operación emitida por un usuario que cambia el estado de un sistema.
  • Árbol de Merkle: estructura de datos que puede almacenar una gran cantidad de información a través de hashes criptográficos.
  • Recibo: un efecto secundario de una transacción que no se almacena en el estado del sistema, pero que se guarda en un árbol de Merkle para que su existencia se pueda verificar fácilmente en un nodo. Los registros de contratos inteligentes en Ethereum se guardan como recibos en un árbol de Merkle.

Estructura de la red de Ethereum

Ethereum está diseñada como una red cliente–cliente (peer-to-peer) de tal modo que los participantes (nodos) tienen los mismos privilegios, pero sus funciones y grado de participación puede diferir. En una red cliente–cliente no existe un servidor o entidad centralizada, por tanto, no existe una jerarquía.

Las criptomonedas distribuidas han adoptado esta arquitectura de red, con el fin de mantenerse fieles a su filosofía e ideología de mantener un sistema monetario donde todos sean tratados como iguales y no exista un órgano rector o autoridad que pueda determinar el valor de la moneda por capricho o modificar, borrar y censurar las transacciones.

Si no existe una autoridad central que autorice y se encargue de procesar las transacciones, ¿cómo podrían los miembros de la red conocer que se ha producido una transacción?

Una red distribuida funciona como una red de chismes. Imaginemos que Lorena envía 7 ETH a Juan. Los nodos más cercanos a ella se enterarán de la transacción, y luego contarán este chisme a sus nodos más próximos. Después estos contarán, a su vez, a sus nodos vecinos y así, el chisme se propagará hasta que todos los nodos lo sepan.

En el contexto de Ethereum, un nodo puede participar en esta red de tres maneras:

  • Manteniendo una copia parcial de la cadena de bloques (light node, en inglés)
  • Manteniendo una copia completa de la cadena de bloques (full node, en inglés)
  • Verificando las transacciones a través de la minería
Mineros versus nodos

Para mantenerlo simple, todos los mineros son nodos completos, pero no todos los nodos completos son mineros. Los mineros necesitan ejecutar nodos completos para acceder a la cadena de bloques. Aquel que corra un nodo completo no necesariamente puede hacer minería de bloques.

En vista de lo complejo y extenso del tema, he divido esta publicación en dos fragmentos. En la segunda parte, hablaremos acerca de cómo funcionaría Ethereum 2.0.

¿Te gustó el artículo? ¡Puedes apoyar a Juan F. Bolaños en Patreon!

Deje un Comentario

Su correo electrónico no será publicado.