Para redes como Ethereum, el tema de la escalabilidad es algo vital para su desarrollo futuro y la adopción masiva de su moneda. Aunque pudiera decirse que el mercado no atraviesa precisamente por su mejor momento, y muchas criptos se vean posiblemente al borde de la extinción, otras, las más fuertes y mejor posicionadas, seguirán presentes en el escenario blockchain por bastante tiempo.
El caso de Ethereum es muy particular. La que es considerada la segunda criptomoneda del mundo tuvo problemas de congestionamiento en su red, luego de que la popularidad de los gatitos cibernéticos CryptoKitties subiera hasta las nubes y sus admiradores no pararan de comprarlos e intercambiarlos, lo que puso momentáneamente de rodillas a la red, para sorpresa de muchos.
Hasta ese momento, Ethereum siempre puso su atención principalmente en dos puntos: la seguridad de su red y la descentralización, dejando la escalabilidad como un tema para ser resuelto luego, pero no contaron con que los felinos digitales se le adelantaran, haciéndolos reconsiderar el asunto.
Entonces, la pregunta que se plantea es ¿cómo hacer la red lo suficientemente escalable sin comprometer la descentralización ni amenazar la seguridad? Una respuesta parece estar en la técnica de fragmentación de estructuras de datos conocida como sharding. Los programadores de Ethereum piensan echar mano de esta tecnología, complementada con un consenso mediante Prueba de Participación, para que atascos como el sucedido con CriptoKitties no vuelvan a ocurrir.
Sharding, divide y vencerás
La técnica de sharding antecede a la cadena de bloques por unos cuantos años, aplicándose sobre todo para la optimización de bases de datos masivas, manejadas por grandes compañías comerciales como Amazon y Microsoft. Con el auge de Big Data, la necesidad de procesar cantidades realmente importantes de información ha dado con el desarrollo de herramientas como MapReduce y Hadoop, que también emplean un enfoque similar.
Un inconveniente con el sharding es que no es fácil de implementar en redes descentralizadas de igual a igual como las de blockchain, donde el estado de los nodos se actualiza globalmente todo el tiempo. Con el sharding, una base de datos es dividida horizontalmente en partes, llamadas “shards”, las cuales funcionan separadamente, pero como un todo, incrementando la escalabilidad y eficiencia del sistema de bases de datos original.
Cada uno de los nodos en una cadena de bloques registra todas las transacciones y estados de la red. Siendo un esquema descentralizado, la seguridad de los datos almacenados en los nodos se ve particularmente favorecida, sobre todo si la red emplea el protocolo de Prueba de Trabajo (PoW), como es el caso de Dash, Bitcoin, Monero, Ethereum, Litecoin y una cantidad de criptomonedas que pasa de las seiscientas. Inversamente, la escalabilidad se ve negativamente afectada en estos casos.
Volviendo al ejemplo de Ethereum, donde cada nodo completo almacena el estado general de toda la cadena, el consenso se complica a medida en que los nodos se hacen más numerosos. Mientras mayor cantidad de nodos exista, mayor será también la cantidad de información que tendrá que intercambiarse entre ellos para llegar a un consenso. Cuando el tráfico en la red sufre picos como el causó la euforia por los gatos coleccionables, los costos del gas se disparan, las transacciones tardan más en ser confirmadas y nadie quiere eso.
Mediante la disgregación propuesta por el concepto de sharding, los nodos son reorganizados en grupos, unidades de trabajo o shards, a los que se asigna una carga de ejecución específica. Al haber shards, la cantidad de transacciones que puede llevar a cabo la red aumenta, gracias al procesamiento paralelo proporcionado por cada grupo. La cadena de bloques es ahora escalable.
Una analogía apropiada sería el funcionamiento de cualquier tejido orgánico. El tejido está formado por células individuales, que, a su vez, realizan miles de funciones por sí mismas, de manera independiente, pero coordinadamente con el resto de las células del tejido.
Vitalik Buterin ha utilizado una comparación geográfica para explicar brevemente el sharding. Según él Ethereum estaría dividida en cientos de islas (shards), donde cada una se ocupe de sus propios asuntos. Cada isla es independiente, con sus reglas internas. Sus habitantes (los nodos) pueden comunicarse entre sí abiertamente. Entre islas, mediante el uso de algún protocolo, el intercambio de información también es posible.
La suma de todo
El efecto sinérgico del sharding permite mejorar la eficiencia general de la red, donde el desempeño total es mayor que la suma del desempeño de sus partes y no depende solamente de la capacidad de cada nodo.
En este modelo, en cada grupo habrá nodos llamados “organizadores”, cuya función sería recopilar la información producida por el shard. El resumen obtenido estaría compuesto por lo siguiente:
– Identificación del shard que produjo la información (el resumen)
– Estado anterior del shard (sin que se aplicaran nuevas transacciones)
– Estado posterior del shard (luego de haberse procesado las transacciones)
– Firmas digitales de dos tercios de los organizadores miembros del shard, necesarias para verificar la integridad del resumen
Los resúmenes enviados por cada shard son almacenados en un solo bloque, agregándose posteriormente a la cadena de Ethereum. Cada nodo es responsable de procesar y verificar sus transacciones, pero lo que termina por incluirse finalmente en la blockchain es la información recopilada en los resúmenes.
Si existieran veinte shards, que procesaron diez transacciones cada uno, el reporte consolidado de sus resúmenes añadiría 200 transacciones al próximo bloque de la cadena, y no unas pocas que se hubieran procesado linealmente.
Los principales problemas que enfrenta el sharding en redes de cadenas de bloques son dos. Primero, la cantidad de nodos en cada shard debe ser tal que la seguridad de la red no se vea expuesta. Si no existen suficientes, dos tercios de los organizadores pudieran verse sobrepasados sin dificultad por agentes dañinos, comprometiendo el grupo de nodos. Y segundo, las cosas se complican cuando dos nodos participan en una transacción (lo que no ocurre en la cadena original, pues todos los nodos procesan linealmente las mismas transacciones).
Tres problemas, una teoría
En el mundo de las cadenas de bloques, existe una teoría denominada “el trilema de blockchain”, según la cual una red permite solamente dos de las siguiente tres propiedades: descentralización, seguridad y escalabilidad. Ya vimos cómo, mediante el empleo de sharding, el equipo de Ethereum planea enfrentar las tres caras de este desafío, haciendo la red escalable, manteniéndola verdaderamente descentralizada y segura, lo que dejaría a Ethereum preparada para una futura adopción masiva.
Otras soluciones propuestas, como el uso de altcoins y el aumento del tamaño del bloque, tienen implicaciones negativas en las dos otras partes del trilema.
Monedas alternativas
Esta propuesta implica olvidarse del modelo de blockchain única donde suceden todas las transacciones, y adoptar un esquema poblado de múltiples monedas alternativas y sus cadenas de bloques respectivas. De esta forma, se reduciría el tráfico por cadena y la escalabilidad no sería realmente un asunto tan serio. Pero mayor cantidad de blockchains significa menor número de nodos en cada una, quedando potencialmente abierta la puerta para intervenciones externas malintencionadas. El modelo es conforme a la descentralización y favorece la escalabilidad, pero la seguridad queda disminuida.
Bloques con esteroides
Si un aumento en el tamaño del bloque fuera aprobado por la comunidad Ethereum, la red continuaría realizando normalmente todas sus funciones, pero el número de transacciones efectuadas por unidad de tiempo se multiplicaría. Tendríamos una red más rápida y las congestiones quedarían en el pasado. El punto en contra es la energía necesaria para procesar bloques más grandes, energía de la que, probablemente, no dispongan muchos de los nodos. Esta situación conduciría a una red mantenida en su mayoría por un grupo de costosos equipos de alta capacidad de cálculo que se encargarían de seguir añadiendo bloques a la cadena. Este segundo esquema hace a la red escalable, la mantiene segura, pero sacrifica evidentemente la descentralización.
El tema central aquí parece ser que las cadenas de bloques, por diseño, no son del todo escalables, aunque sí seguras y descentralizadas. El hecho de que cada nodo tenga que procesar la totalidad de las transacciones es una de las barreras a superar.
Además de sharding, otras alternativas son consideradas por los desarrolladores. Plasma y Raiden vienen en auxilio. Aunque de efecto mayor, Casper también afectará la escalabilidad de Ethereum. Veamos algunos de sus detalles.
Plasma
Otro de los trucos en el sombrero de los desarrolladores para mejorar la escalabilidad de Ethereum es Plasma. Utilizando un esquema parental, Plasma es una solución para procesar las transacciones “fuera de cadena”, sin afectar directamente la blockchain de Ethereum. Bajo su sistema, varias cadenas de bloques, denominadas “cadenas hijas” se derivarían de la cadena principal, que a su vez sería llamada “cadena raíz”.
Aquí, las cadenas hijas disfrutarán de la seguridad que le brinda su cadena raíz, mientras se encargan de procesar todas las transacciones pertinentes a sí mismas y de mantener los registros respectivos. La cadena raíz será la autoridad supervisora de los cálculos llevados a cabo por las cadenas hijas. Si alguna de las cadenas derivadas presentara algún tipo de discrepancia o anomalía, entonces la cadena raíz se vería sometida a revisión.
De esta forma, un ejercito de cadenas derivadas se ocuparía de dividir el trabajo de procesar las transacciones en la cadena de bloques, mejorando notablemente la capacidad total de la red, incrementando su eficiencia. A los nodos de una cadena hija se les permitirá enviar una solicitud de salida a la cadena raíz, entregando un registro de sus transacciones a la misma, de ser aprobada.
La principal fortaleza de Plasma es su heterogeneidad. Cada cadena puede ser un mundo aparte, con sus propias características, reglas y ventajas. Así, distintas cadenas hijas estarán habilitadas para encargarse de transacciones con requerimientos particulares, mientras pertenecen a un único ecosistema.
Raiden
Continuando en la línea de soluciones fuera de cadena, Raiden presenta una mejora de escalabilidad que permite a los nodos registrar las transacciones entre ellos, sin que la cadena raíz se encuentre involucrada.
En Raiden, una vía de comunicación de ida y vuelta se establece entre usuarios cuando dos nodos abren un “canal de estado” por el cual intercambian mensajes en forma de transacciones. Para garantizar la confiabilidad, los mensajes son firmados por cada participante.
En casos de pagos frecuentes programados, este método puede ser muy adecuado. Por ejemplo, para suscripciones de servicios, pago de salarios, mensualidades o cuotas. La cadena raíz permanece libre de tráfico, pues las transacciones son verificadas y registradas entre los nodos que se encuentran en los extremos del canal, en vez de ser almacenadas en cada bloque.
La transacción puede ser concluida en el momento que lo determine cualquiera de las partes. El total de las operaciones se envía luego a la cadena raíz, para ser almacenado en el próximo bloque. Si una persona estuviera suscrita a un servicio anual que cueste US$ 15 a la semana, después de un año de pagos sólo se enviaría una transacción por US$ 720 a la cadena raíz, en vez de 48 operaciones separadas.
Como es natural, esta solución dista de ser perfecta, y presenta un inconveniente importante. Las comunicaciones transitivas entre los nodos de Raiden no son posibles. Para que un nodo se comunique con otro, estableciendo un canal de estado, ambos deben ser directamente adyacentes, la conexión entre ellos debe ser directa. Si entre los nodos A y B existe un canal de estado abierto, y, a su vez, el nodo B se comunica con el nodo C mediante otro canal, entre los nodos A y C no está permitido efectuar una transacción. A pesar de esto, los pagos pueden transmitirse de manera segura entre nodos no conectados directamente, sin peligro de ser bloqueados o robados en el proceso. En el caso anterior, el nodo B actuaría como una estación de relevo que recibiría los fondos del nodo A y los reenviaría al nodo C sin intervenir de ninguna otra forma.
Como compensación, el costo del gas por transacción al utilizar Raiden es mucho menor. Cuando las operaciones entre nodos se llevan a cabo fuera de cadena se necesita menos gas que cuando las mismas se ejecutan dentro de la cadena raíz.
Casper
Mediante la implementación de Casper, los desarrolladores de Ethereum pretenden hacer la transición del protocolo actual de Prueba de Trabajo (PoW) hacia el modelo de Prueba de Participación (PoS). Bajo el esquema de prueba de trabajo, los mineros deben encontrar un hash que reúna ciertas características, de forma tal que puedan validar un bloque y añadirlo a la cadena. Por esta tarea de extracción reciben una recompensa, pero la cantidad de energía consumida en el proceso es considerable, y tenderá a subir a medida que la complejidad de resolver el hash aumente, como es el caso de Bitcoin. Se calcula que anualmente la prueba de trabajo quema unos US$ 1.2 mil millones.
En Casper, los mineros son reemplazados por “validadores”, que en vez de minar bloques los validan antes de agregarlos a la cadena. La prueba de participación escoge a los creadores de bloques de forma determinista. Quienes tengan mayor cantidad de monedas almacenadas tendrán mayor prioridad para ser seleccionados. Los validadores ponen en juego sus fondos al apostarlos a que cierto bloque será añadido a la cadena; el bloque con la apuesta mayor será el próximo en ser incluido. Empleando contratos inteligentes, las monedas apostadas se bloquean hasta que el bloque es creado y puesto finalmente en la cadena.
El concepto de prueba de participación fue presentado en 2011, en el foro de Bitcointalk. Al año siguiente Peercoin se convirtió en la primera moneda alternativa que la usó. Le siguieron muchas otras, Nav-Coin, Qora, NuShares, BlackCoin. Al día de hoy, la lista de altcoins que emplean la prueba de participación pasa de 400 (incluyendo las de protocolo mixto PoW/PoS).
Dos iteraciones, Casper FFG y Casper CBC, serían probadas en Ethereum para obtener retroalimentación en cuanto al desempeño de PoS en la red antes de lanzar definitivamente el protocolo Casper.
Casper FFG
La versión inicial de Casper sería Casper FFG (Friendly Finality Gadget), a ser lanzada junto al mismo tiempo que Constantinopla, el siguiente hard fork de Ethereum proyectado para octubre del 2018. FFG actuaría bajo un esquema híbrido, donde los bloques se extraerían aún con PoW, y, cada cincuenta bloques, los validadores utilizarían la prueba de participación PoS para garantizar lo que Ethereum llama “finalidad”. Finalidad se traduce como verificar la integridad e inmutabilidad de una operación.
Casper CBC
Esta sería entonces la segunda iteración de Casper, lanzada como si fuera un MVP, o producto mínimo viable. CBC es “correct-by-construction”, lo que significa que las especificaciones del protocolo serán establecidas sólo parcialmente y no completamente, como se generalmente se hace. Mediante pruebas de “adversario ideal” se seguirá un proceso de desarrollo que incluye correcciones a las excepciones y fallas detectadas bajo este esquema.
Recientemente, Ethereum ha efectuado cambios en su hoja de ruta, y, al parecer, han desechado el despliegue de Casper FFG, sustituyéndolo por el de Casper V2 (CBC/Zamfir), lo que se espera que ocurra a mediados de 2019. Casper V2 contemplará la implementación de la Prueba de Participación pura. Sharding saldrá al ruedo entre 2020 y 2021.
Tres cadenas para llegar a sharding
Bajo el paraguas de Casper se encontrarán tres cadenas de bloques: Ethereum-PoW (la red actual), la Cadena Faro (Beacon Chain) y la cadena de sharding. Los mineros de la cadena Ethereum que decidan convertirse en validadores en Casper deberán usar un contrato inteligente para hacer un depósito de 32 ETH en la Cadena Faro. De hecho, cualquier usuario puede ser validador efectuando el mismo depósito.
La cadena faro será donde funcione la Prueba de Participación y servirá de base para el despliegue posterior de sharding. Esta blockchain se enlazará con la cadena de shards y “marcará” cuáles bloques provenientes de ellos serán añadidos a la cadena principal, que será ahora la cadena faro.
Como se consideran proyectos independientes, y los desarrolladores de Ethereum están de acuerdo en dar prioridad a la escalabilidad, es bastante probable que sharding debute en Ethereum mucho antes que PoS, sin importar los que diga la nueva hoja de ruta.