(OroyFinanzas.com) – Hace unos días [1] se lanzaba la nueva versión [2] del Bitcoin Core [3], el código de referencia de Bitcoin. La versión 0.12.0 [4] ha contado con la colaboración de cerca de 100 desarrolladores durante los últimos siete meses e incluye más de 20 mejoras, siendo la versión del código que incorpora mayor cantidad de novedades desde que Satoshi Nakamoto [5] lanzase la primera versión, hace ahora siete años [6]. La mayoría de las mejoras están enfocadas a mejorar el rendimiento, la seguridad y la facilidad de uso de Bitcoin, y algunas de ellas han sido criticadas en la comunidad. Veamos cuáles son las principales novedades [7].
La limitación del Memory Pool en Bitcoin Core
El Memory Pool es el lugar donde cada uno de los nodos completos [8] de la red Bitcoin almacenan las transacciones sin confirmar, a la espera de que sean incluidas en un nuevo bloque. Mientras que los mineros [9] trabajan por resolver un bloque con el conjunto de transacciones incluidas en dicho bloque, el resto de transacciones que se producen en la red quedan registradas en los Memory Pools de cada nodo hasta que las operaciones son incluidas en alguno de los bloques resueltos. Si una serie de bloques permanecen llenos durante un largo periodo de tiempo (ya sea porque haya muchas transacciones legítimas o por ataques de spam) y esas transacciones no pueden ser incluidas en nuevos bloques, las Memory Pools no pueden vaciarse completamente, lo que puede llevar a que se produzcan retrasos. Hasta ahora no existía un límite en la capacidad de almacenamiento de estas Memory Pools, lo que podía significar que en caso de que ese retraso se alargase en el tiempo, los nodos no dispusiesen de la memoria necesaria para almacenar todas las transacciones y dicha saturación terminase por forzar una caída de dicho nodo.
Por ello, este cambio introducido en la nueva versión impone un límite al tamaño de los Memory Pool para evitar este escenario. Si se alcanza ese límite, los nodos rechazan o borran de sus Memory Pools el conjunto de transacciones que incluyen menos tasas por bytes.
Los operadores de nodos completos podrán configurar ese límite individualmente para adaptarlo a sus necesidades de almacenamiento, aunque el máximo predeterminado que viene configurado es de 300 MB.
De esta manera, se evitan los ataques spam que en el pasado ha sufrido la red Bitcoin, y los peligros asociados a ellos.
Reducción del tamaño de la cadena de bloques (blockchain) para los usuarios de carteras
Uno de los inconvenientes con el que se encuentran los usuarios que desean instalar un nodo completo es el requisito necesario de almacenar la cadena de bloques (blockchain) [10] completa, que actualmente ocupa 55 GB y que podría crecer en 50 GB por año bajo el actual límite del tamaño de los bloques de 1 MB [11].
Para disminuir este requisito, la nueva versión del Bitcoin Core permite que los usuarios reduzcan el tamaño de la cadena de bloques eliminando datos antiguos, una vez que su nodo los haya verificado. La cantidad de datos almacenada se vuelve configurable, aunque seguirá siendo requerida una capacidad de 2GB de espacio en el disco para poder tener un nodo.
Esta reducción del tamaño de la cadena de bloques implica que los nodos que la lleven a cabo no podrán compartir todos los datos con los pares (los otros nodos) de la red, como por ejemplo, la sincronización de la cadena de bloques por primera vez con los bloques completos.
Esta nueva característica ya fue introducida en la versión 0.11.0 del Bitcoin Core, aunque no estaba activa para los usuarios que utilizaban las carteras de Bitcoin Core, que ahora podrán beneficiarse de esta reducción en la necesidad de espacio en su disco duro.
Límite al tráfico de subida de datos en Bitcoin Core
Los nodos completos de la red Bitcoin se transmiten continuamente entre ellos las transacciones y los bloques en la red entre pares (p2p) [12]. Para que esto sea posible es necesario la capacidad de descarga de datos, pero el hecho de tener que compartirlos con varios nodos al mismo tiempo añade la necesidad de costos en la subida de dichos datos. Por ello, Bitcoin Core 0.12.0 añade un límite de datos configurable para el tráfico de subida de datos. Si se alcanza ese límite, el nodo dejará de subir bloques de más de una semana de antigüedad, que típicamente se requieren para la sincronización de nuevos nodos de la red. Adicionalmente, los clientes ligeros se desconectarán y no ofrecerán ninguna información relativa a los datos de los bloques.
Reemplazar transacciones para aumentar tasas de minería (Opt-in Replace-by-fee) en Bitcoin Core
A medida que el número de transacciones en la red Bitcoin aumenta, no todas las transacciones podrán ser incorporadas en los bloques. Por ello, posiblemente los mineros decidan incorporar las transacciones que incluyan mayor cantidad de tasas, descartando el resto, lo que significa que algunas transacciones (especialmente aquellas que no tienen tasas o éstas son bajas, y por lo tanto no llevan asociado un beneficio directo para los mineros, ya que cabe recordar que esas tasas junto con la recompensa por resolver un bloque son los incentivos económicos que reciben los mineros) no se confirman. Además, hay que tener en cuenta que actualmente los nodos completos y los mineros tienden a rechazar las transacciones conflictivas, es decir, aquellas que son enviadas desde un mismo input de una transacción anterior, lo que implica que las transacciones que tienen una baja tasa pueden quedar de alguna forma bloquedas en la red, y sus fondos congelados.
Para solucionar esto, Bitcoin Core 0.12.0 introduce lo que se conoce como opt-in replace-by-fee, es decir, posibilidad de reemplazar una transacción anterior con la introducción de una tasa o comisión superior en la misma transacción. Así, si una transacción se envía con esta característica, el usuario puede llegar a reemplazar esa misma transacción con una efectuada posteriormente mediante la inclusión de una tasa o comisión más elevada. De esta forma, el hecho de que una transacción sea relegada por los mineros, ya que la tasa de minería incluida es muy baja, podría eliminarse y volverse a transmitir a la red en forma de una nueva transacción con una tasa mayor, para que ese incentivo económico superior para los mineros provoque que éstos no la rechacen y que la incluyan en un bloque.
Estas transacciones, sin embargo, no serán las predeterminadas en la red, sino que será el usuario el que elija si quiere hacer uso de este tipo de transacción, y quedarán por tanto marcadas como tal.
Esta nueva funcionalidad ha sido muy debatida en la comunidad, ya que ha contado con muchos detractores. Y por ello, puede también ser desactivada en los nodos que ejecuten el cliente con una modificación en el código fuente. Sin embargo, si se trata de una característica útil a medio y largo plazo dependerá de los mineros, que son los que en última instancia deciden qué transacciones son incluidas en los bloques, y bajo qué condiciones.
Por el momento, la cartera de Bitcoin Core de esta versión no puede procesar este tipo de transaccines reemplazables, algo que se desarrollará en versiones posteriores.
Bitcoin usará Tor por defecto
Si bien a menudo se afirma que Bitcoin proporciona el anonimato a los usuarios, esto no es del todo cierto [13]. Los usuarios Bitcoin pueden ser desanonimizados, por ejemplo, a través de la red peer-to-peer. Si se determina a partir de qué dirección IP se originó una transacción, esta información se puede utilizar para identificar a los usuarios Bitcoin.
Para proteger la privacidad de los usuarios, Bitcoin Core 0.12.0 se conecta automáticamente a la red Bitcoin a través de Tor (The Onion Router) [14], siempre y cuando el ordenador tenga instalado Tor. De esta forma, los datos quedarán cifrados y serán enturados a través de varios nodos en todo el mundo antes de que sean transmitidos a la red Bitcoin. Lo que hace que sea difícil, incluso imposible, rastrear el origen de una transacción Bitcoin.
Sin embargo, cabe señalar que el uso de Tor en sí mismo podría no ser suficiente para proteger la identidad de un usuario Bitcoin, como ya explicaremos en otro artículo.
Validación de firmas más rápidas
Las firmas son los elementos criptográficos creados con la combinación de las claves privadas con otros datos para crear una cadena única de números. Las claves públicas [15] pueden utilizarse para verificar que las firmas se crearon utilizando las claves privadas y en el caso de Bitcoin, las firmas sirven para demostrar la propiedad de los bitcoins, y por tanto, para validar las transacciones que lleven asociados dichos bitcoins.
Sin embargo, hay varias maneras de ejecutar estos elementos criptográficos, lo que podría dar lugar a diferentes firmas, todas ellas válidas. Por ello, si los diferentes nodos Bitcoin aplican diferentes métodos para su validación, algunos nodos podrían considerar ciertas transacciones válidas, mientras que otros nodos no lo hacen, lo que podría suponer una división de la red Bitcoin.
Por ello, tras el soft fork [16] introducido el año pasado en el código del Bitcoin Core 0.10.0 para resolver este problema, ahora la nueva versión del código introduce un cambio en toda la validación de la biblioteca criptográfica pasando de “OpenSSL” a “Libsecp256k1” [17].
Esta nueva biblioteca criptográfica requiere menos potencia de CPU, lo que reduce el coste de funcionamiento de un nodo completo, disminuyendo significativamente el tiempo de validación de los bloques.
Además traerá consigo una mayor velocidad en el hardware para verificar a los nuevos nodos [8] completos que se unan por primera vez a la red y también se aligerará el tiempo de carga de los nodos Bitcoin existentes. Algo que puede ser muy beneficioso para Bitcoin ya que más nodos, significa una red Bitcoin más robusta y más descentralizada. En concreto la velocidad aumentará “de 500% a 700% en el hardware x86_64 durante la verificación”.