¿Cuál es el problema de la escalabilidad de blockchain?
La escalabilidad es uno de los problemas más importantes en blockchain y ha sido el foco de interés tanto de los desarrolladores como de investigadores académicos.
Primero debemos dar un significado a la palabra escalabilidad. Podemos entender este término como la capacidad de un sistema o red de crecer en tamaño y gestionar un aumento creciente del trabajo. Se dice que un sistema es poco escalable si, en lugar de asignar más recursos, requiere esfuerzos adicionales que modifiquen el sistema para hacer frente al aumento de la carga de trabajo.
Concretamente en blockchain, la escalabilidad hace referencia a la cantidad de transacciones que la red puede procesar.
¿Por qué es tan importante este problema?
Debido a que si los proyectos blockchain no son capaces de ofrecer la misma o similar velocidad de procesamiento que los sistemas centralizados con los que compiten, será extremadamente complicado que supongan una alternativa viable y aceptable para el público en general.
También, debido a las consecuencias que se han visto hasta la fecha:
Aumento de las comisiones por transacción: no podemos hacer desaparecer las comisiones, ya que son un incentivo para los mineros para procesar, validar y crear un bloque. Sin embargo, al estar limitado el número de transacciones por bloque, los mineros tenderán a incluir las transacciones con las comisiones más altas. Esto lleva al aumento de las mismas cuando hay un alto tráfico en la red.
Aumento de los tiempos de espera: existe un límite de transacciones por bloque. Si el número de transacciones que esperan para ser incluidas es mayor, aumentará el tiempo de espera para que sean confirmadas. Si, además, no incluyes una alta comisión, seguramente, te toque esperar bastante (podemos hablar de horas e, incluso, días).
Dificulta la adopción: si juntamos las anteriores consecuencias nos lleva a ésta. ¿Por qué la gente va a adoptar un sistema cuyas comisiones pueden aumentar desmesuradamente si hay gran tráfico en la red y, además, los tiempos de espera pueden ir desde minutos hasta días. Cuando tenemos los sistemas actuales son instantáneos?
Aquí podemos llegar a pensar, ¿por qué no eliminamos las comisiones? Porque gracias a ellas se mantiene el sistema. Tiene que existir algún tipo de incentivo para que las personas quieran mantener la red y participar en ella de forma honesta. Dicho incentivo son las comisiones y los premios por haber creado un bloque. Si consideramos que los premios por bloques disminuyen paulatinamente y, además, eliminamos las comisiones, ¿qué incentivo tienen las personas por querer mantener la red?
¿Causas?
El problema tiene múltiples causas. Primero, viene derivado de las limitaciones impuestas por el protocolo, aquí podemos identificar dos causas:
- Limitación en el tamaño del bloque: La razón del límite se basa en que a mayor tamaño del bloque más tiempo se necesitará para propagarlo por la red. Además, de esta forma se previene el ataque de denegación de servicio. Sin un límite, un atacante podría crear un bloque o bloques lo suficientemente grandes como para paralizar la red entera.
- Frecuencia de generación del bloque: Cuanto más reducimos el tiempo de generación de bloques, más importante se vuelve el tiempo de propagación de los mismos. Se ha puesto un tiempo mínimo de generación de bloque para reducir la probabilidad de bloques huérfanos y forks.
Podemos decir que por cada segundo que pase antes de que el nodo sepa cuál es el último bloque, las probabilidades de que dicho nodo produzca un bloque huérfano aumenta proporcionalmente al tiempo transcurrido desde la generación del bloque. Esto tiene un impacto directo en la seguridad de blockchain, porque tanto si aumentamos el tamaño del bloque como si reducimos el tiempo de generación de bloques, el tiempo que lleva propagar uno nuevo por toda la red será similar al propio tiempo de creación, por tanto las probabilidades de que aparezca una nueva cadena y sustituya a la original aumentan. Esto tiene un impacto en cuanto a la garantía para considerar que una transacción se considere irreversible.
En consecuencia, al manipular estas dos variables estamos jugando con el riesgo de aumentar la creación de bloques huérfanos (por tanto, recursos desperdiciados), creación de forks, el roll back de transacciones y aumentando la probabilidad de un ataque de doble gasto.
Segundo, debido a la descentralización de la red, para poder llegar a un consenso, todos los nodos que participan del protocolo completamente (full nodes) deben procesar todas las transacciones. La consecuencia inmediata de esto es que el máximo número de transacciones que puede procesar una red no puede superar la cantidad que cualquier nodo de la red es capaz de procesar. Por tanto, la red se limita por su nodo más débil. A lo que hay que sumar que por cada nodo que se suma la red la latencia entre ellos aumenta logarítmicamente. En consecuencia, a mayor cantidad de nodos en la red no solo no aumentamos la capacidad de procesar transacciones, sino que aumentamos el tiempo necesario para llegar el consenso, por tanto, la red se vuelve más débil.
Aquí hemos llegado al punto clave del problema. Partiendo de la base de que en cualquier sistema de las características de Bitcoin o Ethereum la seguridad es una variable indiscutible. Cuanto más descentralizado es el sistema, menos escalable se vuelve, por las razones expuestas. Y, por otro lado, cuanto más escalable es la red, menos descentralizada se vuelve, ya que habrá más requisitos para poder participar como capacidad de almacenamiento, ancho de banda, capacidad de cómputo, etc. También podemos considerar que cuanto más escalable y descentralizado es el sistema, menos seguro se vuelve.
Es a este problema lo que Vitalik Buterin llamó “The Scaling Trilemma”. Afirma que una blockchain pública en la que cualquiera puede participar, puede tener como máximo 2 de las 3 propiedades: seguridad, escalabilidad y descentralización.
Si lo visto hasta ahora no nos parece suficiente, vamos a sumarle algo más. Los cambios que se efectúan en estos tipos de proyectos descentralizados exigen el acuerdo de toda la comunidad o, por lo menos, más de la mitad. Siendo de una gran dificultad y causa de hard forks (si no conseguimos que todos los participantes lo acepten), tenemos el ejemplo de Bitcoin Cash. Además, aunque consigamos el acuerdo de toda la comunidad, el error no es algo aceptable, por lo que requiere un desarrollo muy cuidado y pruebas muy estrictas antes de poder lanzar un cambio. No solo está el peligro del hard fork, también la credibilidad y la confianza de la blockchain si algo sale mal.
Entendiendo el problema, veamos algunas propuestas para resolverlo:
Aumento del tamaño del bloque
Ha habido varias propuestas alrededor de esta idea, así nació Bitcoin cash. Como hemos explicado antes, la idea se basa en aumentar el límite impuesto al tamaño del bloque. Así se consigue que más transacciones puedan incluirse dentro de cada bloque.
Mejorar la eficiencia de ciertos procesos
Aquí podemos encontrar propuestas que buscan mejorar los procesos existentes y sustituirlos por alternativas más eficientes, por ejemplo:
· Utilización de algoritmos de hash más eficientes. Una de las propuestas es la firma Schnorr
· Utilización de estructura de datos alternativas a los Merkle Trees para la organización de transacciones dentro del bloque. Merkelize Abstract Syntax Tree es una propuesta para reducir los tamaños de los smart contracts.
Layer 2
Todas las blockchains están organizadas en diferentes niveles (layers):
Cuando hablamos de blockchain nos referimos al nivel 1. Las propuestas en esta categoría se refieren a mejoras en el nivel 2.
Es el nivel que se encuentra por encima de blockchain. No se ve afectado por la lentitud de blockchain. Las propuestas en este nivel hablan de canales de pagos off-chain, side chains.
La idea de los canales de pago, a grandes rasgos, es establecer una comunicación entre los participantes para que puedan realizar transacciones entre ellos, sin involucrar el proceso de minado. El resultado final se grabará en la cadena de bloques. De esta forma, liberamos a la blockchain del procesamiento de cierta cantidad de transacciones. Principalmente, está pensado para transacciones de poca cuantía. Un ejemplo de esta propuesta lo tenemos en Raiden Network y Lightning Network.
También tenemos las side chains. Son cadenas de bloques separadas de la principal, pero que se encuentran conectadas con ella a través unos conectores llamados ‘two-way peg’. Estos son los encargados de la sincronización entre ambas cadenas. Esta propuesta nos permitiría crear blockchain con usos específicos respaldadas por la cadena principal, al mismo tiempo que libera de carga de trabajo a ésta. Un ejemplo de esta propuesta es RSK.
Sharding
Se aplica la misma técnica que la utilizada para escalar bases de datos centrales. Consiste en particionar los datos horizontalmente agrupándolos bajo cierto criterio (estos grupos son los llamados shards) y que permite un direccionamiento más rápido. Por ejemplo, agrupar usuarios por nombre.
La misma idea se aplicaría en blockchain, cuyo state será divido en shards y un nodo no necesitaría toda la información para verificar y procesar una transacción. Las transacciones serían redirigidas a los nodos según el shard que afecten. De esta forma conseguimos el trabajo de verificación y que el procesamiento pueda ser en paralelo.
Esta idea no está exenta de problemas. El primero de ellos es que debemos asegurarnos que los shards están suficientemente descentralizados. La razón es que los shards pueden ser fácilmente controlados por un único nodo, lo que se conoce como single-shard takeover attack.
Otro problema es la comunicación entre los shards. Si la comunicación entre ellos es muy frecuente, el sistema puede ser menos eficiente que el actual.
Por último, problemas como el fraude y la disponibilidad de los datos también hace que esta propuesta sea de las más complicadas.
Sin embargo, a pesar de los obstáculos expuestos, sharding es una de las propuestas más prometedoras de cara a resolver el problema de la escalabilidad.
Fuentes:
Grayblock. 2018. Medium. [Online]. [1 August 2019]. Available from: https://medium.com/coinmonks/blockchain-scaling-30c9e1b7db1b
Blockgeekscom. 2017. Blockgeeks. [Online]. [1 August 2019]. Available from: https://blockgeeks.com/guides/blockchain-scalability/
Upcedu. 2019. Upcedu. [Online]. [1 August 2019]. Available from: https://upcommons.upc.edu/handle/2117/128785
Gerald fenech. 2019. Forbes. [Online]. [1 August 2019]. Available from: https://www.forbes.com/sites/geraldfenech/2019/01/15/solving-the-bottleneck-of-blockchain-and-the-scalability-trilemma-through-sharding/
Cryptopotatocom. 2018. CryptoPotato. [Online]. [1 August 2019]. Available from: https://cryptopotato.com/blockchains-and-the-scalability-problem/
Georgios konstantopoulos. 2019. Medium. [Online]. [1 August 2019]. Available from: https://medium.com/loom-network/scalability-tradeoffs-why-the-ethereum-killer-hasnt-arrived-yet-8f60a88e46c0
Wikipediaorg. 2019. Wikipediaorg. [Online]. [1 August 2019]. Available from: https://en.wikipedia.org/wiki/Bitcoin_scalability_problem
Masterthecryptocom. 2018. Master The Crypto. [Online]. [1 August 2019]. Available from:https://masterthecrypto.com/blockchain-scalability-bitcoin-scalability-problem-effects/
Eublockchainforumeu. 2019. Eublockchainforumeu. [Online]. [1 August 2019]. Available from: https://www.eublockchainforum.eu/sites/default/files/research-paper/an_overview_of_blockchain_scalability_interoperability_and_sustainability.pdf?width=1024
Applicaturecom. 2018. Applicature. [Online]. [1 August 2019]. Available from: https://applicature.com/blog/blockchain-technology/blockchain-scalability
Vechainworldio. 2019. VeChain . [Online]. [1 August 2019]. Available from: https://bbs.vechainworld.io/topic/166/what-does-scalability-really-mean-in-blockchain
Hackernooncom. 2019. Hackernooncom. [Online]. [1 August 2019]. Available from: https://hackernoon.com/blockchains-dont-scale-not-today-at-least-but-there-s-hope-2cb43946551a
Researchgatenet. 2019. ResearchGate. [Online]. [1 August 2019]. Available from: https://www.researchgate.net/publication/330886229_Research_on_Scalability_of_Blockchain_Technology_Problems_and_Methods
Coinrevolutioncom. 2018. CoinRevolutioncom. [Online]. [1 August 2019]. Available from: https://coinrevolution.com/bitcoin-scalability-problem/
https://www.codementor.io/blog/blockchain-scalability-5rs5ra8eej