Pages

Derribando mitos – Hoy: “Bitcoin no es escalable”

Fuente: gavinandresen.ninja  Por Gavin Andresen

La informática tiene esta cosa llamada “notación Big-O” (eso es O como en “oh”, no es cero). Es una manera de describir cómo los algoritmos se comportan a medida que se les da mayores problemas para resolver.

fractal-tree

Durante el gran debate por el tamaño máximo del bloque, se ha dicho reiteradamente que “Bitcoin no es escalable, ya que se comporta como O(n2)”. La escala de N al cuadrado no es sostenible; dobla el N y necesitarás cuatro veces más recursos (memoria o CPU).

En la conferencia de Montreal sobre la escalabilidad de Bitcoin tuve la oportunidad de conversar con un par de esas personas y preguntarles de qué diablos estaban hablando. Y resultó que se estaban refiriendo a cosas diferentes.

Algunos de ellos toman la ley de Metcalfe (“el valor de una red de comunicaciones aumenta proporcionalmente al cuadrado del número de usuarios del sistema (n2)”) y la aplican a las transacciones Bitcoin, en el supuesto de que si hay N personas utilizando Bitcoin, generarán colectivamente N2 transacciones. Eso es una tontería, porque incluso si teóricamente todo el mundo pudiese realizar transacciones con todos los demás utilizando Bitcoin, no lo harían. Yo he hecho transacciones probablemente con menos de 100 personas o empresas en los cinco años que he estado utilizando Bitcoin; la demanda de transacciones escala linealmente con el número de personas que lo usan.

Luego está la observación de que, en el supuesto de un crecimiento del número de transacciones “n” en el tiempo, todo el historial de transacciones crece O(n2) (véase la reciente presentación de Patrick Strateman). Según esta afirmación, crecer más rápido que la energía del CPU o el espacio del disco duro implicará que a la larga ningún nuevo usuario será capaz de validar toda la cadena de bloques.

El problema es la creencia de que debes validar toda la cadena de bloques, desde el bloque génesis en adelante, para ser un verdadero bitcoiner. Esa es en mi opinión una visión innecesariamente acotada —creo que cada persona debe tener la libertad de hacer concesiones en función de su propia evaluación de confianza/coste/conveniencia–. Por ejemplo, un usuario nuevo podría evitar la descarga de toda la cadena de bloques obteniendo una instantánea del libro mayor de algún bloque reciente (“buscar el conjunto de outputs no gastados (UTXO)”) de uno o más nodos de la red. Eso es mucho más rápido y cómodo que descargar toda la historia de la cadena de bloques, y es casi perfectamente seguro. Incluso si obtienes una mala copia del libro mayor, lo peor que puede pasar es que haya entradas adicionales en el libro (tal vez el atacante se otorgue a sí mismo un millón de bitcoins que en realidad no tiene), o que falten entradas.

Si hay entradas extra, un atacante podría enviarte una transacción no válida que nunca se confirmaría. Es decir que podría hacer básicamente lo mismo que hoy puede hacer simplemente enviándote una transacción y al resto de la red un doble gasto. Si, en cambio, faltaran entradas, tu cartera podría pensar lo contrario –que una transacción válida no lo es–. El error sería descubierto tan pronto como la transacción fuera verificada en la cadena, y podría recuperarse consiguiendo el libro mayor de una fuente más fiable.

Por último, este otro argumento de O(n2) se ha mencionado:

Si asumimos que hay “n” usuarios, y una proporción constante de ellos (por ejemplo 1%) mantiene nodos completos, y cada usuario genera un cierto número de transacciones por día… entonces el trabajo de validación total realizado por todos los nodos completos cada día es O(n2) (En realidad, O((n/100)2), pero los factores constantes se ignoran en la notación Big-O).

Hay dos errores en este argumento: primero, la suposición de que una proporción constante de usuarios mantendrá nodos completos con el crecimiento de la red podría ser incorrecta. Es probable que una proporción cada vez mayor de la gente opte por usar nodos de validación parcial. En el futuro podría haber mil millones de personas usando Bitcoin, pero sólo unas decenas de miles (en lugar de decenas de millones) de nodos de validación completa. Ese sería un futuro brillante, exitoso, descentralizado y seguro.

La segunda cosa que está mal en ese argumento es que mientras toda la red podría, de hecho, realizar O(n2) trabajo de validación, cada uno de los n individuos sólo realizaría O(n) trabajo –y esa es la métrica importante, ya que cada individuo es indiferente a la cantidad de trabajo que el resto de la red está haciendo para validar transacciones; lo que le interesa es la cantidad de trabajo que su equipo debe hacer–.

Ver texto original en inglés