Uno de los principales argumentos usados en contra de Bitcoin Cash —quizás podríamos decir incluso «en contra de Satoshi Nakamoto»— es que los bloques grandes son una forma ineficiente de escalar la cantidad de transacciones por segundo que puede soportar la red.
Para quienes sí apoyamos la idea de Satoshi de aumentar el tamaño máximo de los bloques conforme la demanda de espacio crezca, la cuestión es simple: mientras más grande es el bloque, más espacio hay para todas las transacciones que ocurren cada diez minutos. Si restringiéramos arbitrariamente esa métrica, estaríamos poniendo un límite artificial a la capacidad de procesado de la red, que es exactamente lo que ocurre en la versión más popular de Bitcoin.
Sin bien es cierto que los bloques de 1 GB parecen un futuro un tanto lejano —en la Scalenet se trabaja para implementar bloques de «solo» 256 MB—, la realidad es que incluso ese tamaño de bloque no presentaría un enorme desafío teniendo en cuenta el estado actual de las velocidades de Internet y precio del almacenamiento. Es común hoy en día contar con conexiones domésticas que alcanzan velocidades de varios cientos de megabits por segundo.
Sin embargo, cuando bloques de 1 GB sean necesarios, estaríamos hablando de 53 TB de almacenamiento por año dedicados a procesar y almacenar las más de 6500 transacciones por segundo que se van a estar dando. Por lo tanto, cabe preguntarse, ¿cómo vamos a hacer para almacenar todas esas transacciones y cuáles van a ser los incentivos para mantenerlas?
Los nodos mineros, que son los que validan y aseguran la red de Bitcoin Cash, no tienen la obligación de almacenar todas las transacciones y los bloques, ya que únicamente precisan del set de UTXO y los encabezados de los bloques. Probablemente estos nodos elijan mantener una cantidad n de bloques, descartando el resto.
Por otro lado, nuevos nodos que se quieran sumar a la red sí deben descargar y validar desde el bloque génesis todas las transacciones. Esto, que hoy en día es tarea de algunas horas, en el futuro podría tardar semanas en completarse, dificultando enormemente la adición de nuevos nodos a la red ya existente.
Es por eso que desde ahora, antes de que Bitcoin Cash despegue y la adopción comience a masificarse, debemos plantearnos la necesidad de encontrar una solución al almacenamiento para poder consultar y la cadena de bloques. Y una interesante opción, que me gustaría que se considerara, sería hacerlo utilizando una tecnología distribuida diseñada para este propósito: IPFS.
¿Qué es IPFS?
IPFS (por sus siglas en inglés, ‘sistema de archivos interplanetario’) es, un protocolo P2P que permite almacenar datos en una red distribuida entre varios equipos. La información no se obtiene buscando en una ubicación, sino que se solicita a los nodos de IPFS un archivo o carpeta usando el hash de la misma. Los nodos de IPFS reciben el pedido y pueden devolver el archivo, cuyo hash puede ser comparado con el solicitado para verificar la autenticidad de la información.
Si se desea almacenar la cadena de bloques de Bitcoin Cash utilizando IPFS, no hace falta más que los nodos que actualmente poseen una copia de la misma la pongan a disposición utilizando este protocolo, que funciona de forma parecida a como lo hace BitTorrent. Eventualmente, cuando la cadena de bloques crezca lo suficiente, sería posible que solo una parte sea mantenida por cada nodo, pero permitiendo haciendo que varias copias redundantes sean accesibles a toda la red.
Lógicamente, la implementación de IPFS como uno de los mecanismos principales para acceder al historial de transacciones tendría varias ventajas, por ejemplo:
Cualquiera puede alocar espacio de almacenamiento en su computadora para poder contribuir a la red (desde un hobista hasta un centro de datos especializado).
Se puede garantizar la redundancia de datos programando IPFS para que priorice la descarga de los bloques que se repiten menos veces en la red conocida, lo que a gran escala genera que haya una enorme disponibilidad de capacidad de almacenamiento y redundancia de datos y haciendo extremadamente difícil eliminar todas las copias existentes.
Nodos más pequeños pueden participar alocando el espacio de almacenamiento del que dispongan sin requerir una copia completa.
El acceso a los bloques sería mucho más rápido, logrando descargar y validar las transacciones desde varios nodos separados en lugar de un solo servidor centralizado (lo que tradicionalmente se conoce como archival node).
La escalabilidad de la red en términos de almacenamiento posibilita que existan muchas más copias de la cadena de bloques. Y los beneficios obtenidos en abaratamiento de los costos de resguardo de datos —por la ley de Moore— se acoplaría a los obtenidos por la eficiencia general de una red distribuida.
Y todo esto sin comprometer la seguridad de la cadena de bloques. Por las propiedades de IPFS, el historial de transacciones se mantendría intacto.
IPFS no es una cadena de bloques secundaria, sino un sistema de archivos descentralizado que es agnóstico de la información almacenada (es posible archivos, páginas web y dapps).
¿Qué incentivos existirían para almacenar el historial de la cadena de bloques?
Una opción sería cobrar una comisión a cambio de brindar acceso a un bloque o transacción determinado. Por ejemplo, una billetera puede conectarse a IPFS automáticamente cuando el usuario quiera explorar un bloque o transacción particular. En este caso, el nodo que posee la información deseada, puede cobrar una fracción de un centavo a cambio de brindar el acceso. El usuario puede validar que la información es correcta ya que el protocolo IPFS compara el hash solicitado con el hash del archivo recibido, asegurando que los nodos no puedan mentir sobre el historial de transacciones.
Por eso, usar tecnologías distribuidas para permitir la escalabilidad de la cadena de bloques es un paso necesario si queremos garantizar que Bitcoin Cash siga siendo la moneda visualizada por Satoshi Nakamoto en su whitepaper.
Espectacular artículo Leo! felicidades