SegWit. Mejorando al Bitcoin

¿Qué es SegWit?

            Segregated Witness o SegWit como más comúnmente se le conoce,  es el nombre utilizado para un cambio en el formato de transacciones de la criptomoneda Bitcoin. Fue propuesto por la empresa Blockstream y el equipo de desarrollo del cliente Bitcoin Core. Su implementación se dio gracias a un soft fork de la red Bitcoin (BTC). Aunque también ha sido adoptado por criptomonedas como Litecoin, DigiByte y Vertcoin.

Los desarrolladores Pieter Wiulle, Johnson Lau y Eric Lombrozo presentaron la idea por primera vez en la conferencia Scaling Bitcoin en diciembre de 2015. Su presentación ante el mundo se realizo con la publicación del BIP141, bajo el nombre de “Segregated Witness (Capa de Consenso)”.  

Explicaron que el firme propósito de este cambio es el de proveer una solución al problema de la maleabilidad de las transacciones y mitigar el impacto negativo del limite máximo de los bloques al procesarlos en la red. Tal hazaña se logra gracias a que las transacciones se dividen en dos partes. La primera parte (data de contabilización) lleva toda la contabilización de la transacción. Mientras que la segunda parte (data de testigo) se procesa luego como otro bloque de datos con tamaño más reducido. Todo esto sin cambiar de forma dura, el tamaño del bloque de Bitcoin, que es de 1 MB por cada bloque.

El primer proyecto, en activar SegWit en su blockchain fue Litecoin. El 10 mayo de 2017, los desarrolladores de Litecoin informaron del lanzamiento oficial de esta característica en su red. Más tarde el 23 de agosto de 2017, Bitcoin activo la característica en su red.

 

Funcionamiento de SegWit

El funcionamiento de SegWit es bastante sencillo. El protocolo divide la información de los bloques de cada transacción en dos partes. Una primera parte contiene la información de la transacción como tal (address wallets, Bitcoins enviados, hash de transacción). Mientras que una segunda parte, lleva las firmas necesarias para validar la transacción como tal (firmas e información de verificación).

De esta forma, el segundo bloque lleva toda la información del testigo de la transacción. El resultado de este proceso es la creación de un nuevo árbol Merkle con toda la información de los testigos, separado del árbol Merkle de transacciones. Esta división permite agregar mayor cantidad de información contable a los bloques de transacción. Con ello se  incrementa la cantidad de operaciones que se pueden procesar y el rendimiento general de la red, sin necesidad de alterar el tamaño de los bloques.

Para tener una idea de cuanto espacio libre estamos hablando al dividir la información de esta forma, tengamos en cuenta que la información de testigo puede ocupar hasta 60% de toda la información almacenada en cada bloque Bitcoin. Esto significa que cada bloque de transacción tiene como mínimo el doble de capacidad en comparación al enfoque anterior. Al mismo tiempo, el enfoque de bloques de SegWit permite evitar ciertos problemas entre los que se destacan:

  1. La maleabilidad no intencional se vuelve imposible de realizar. Esto gracias a que los datos de firma ya no forman parte del hash de la transacción. Los cambios en la forma en que se firmó la transacción ya no son relevantes para la identificación de la transacción. Esto evita el robo de activos por parte de terceros malintencionados que tenga la habilidad de modificar dichos valores.
  2. La transmisión de datos de firma se convierte en opcional. Solo es necesario si un par está tratando de validar una transacción. Esto reduce el tamaño de las pruebas de SPV y, potencialmente, mejora la privacidad de los clientes de SPV. Con esto se logra descargar más transacciones utilizando el mismo ancho de banda.
  3. Algunas restricciones se pueden omitir moviendo parte de los datos de la transacción a una nueva estructura. Por ejemplo: el tamaño del testigo podría ignorarse o descontarse al calcular el tamaño del bloque, lo que aumentaría efectivamente el tamaño del bloque hasta cierto punto. Además las constantes codificadas, como el tamaño máximo de inserción de datos (520 bytes) o el límite de sigops, podrían reevaluarse o eliminarse. Por otro lado, el nuevo sistema de script podría introducirse sin ninguna limitación a partir de la secuencia de comandos semántica existente.

 

Un buen ejemplo de los cambios introducidos en la estructura de bloques con SegWit, puede visualizarse en el siguiente esquema:

Diagrama explicativo SEGWIT

Figura 1: Estructura de un bloque de Bitcoin sin y con SegWit

Adicional a todo esto, SegWit permite que los tamaños de bloques sean dinámicos, dentro de un rango no mayor a 4 MB, según se explica en el BIP141. Es decir, con este enfoque en el peor de los casos podemos multiplicar por ocho la potencialidad de la red Bitcoin. El mayor logro de SegWit es que no rompe la compatibilidad de la blockchain original del Bitcoin, permitiendo una transición suave entre el antiguo protocolo de manejo de transacciones y el uso de SegWit. De hecho, ambos sistemas pueden convivir perfectamente sin ningún problema para la red, más allá del hecho que esto limitaría hasta cierto punto el rendimiento general de la red. Es decir, que en una red heterogénea (con nodos usando SegWit y otros no) el rendimiento final de la red no sera igual al de la red con completo soporte para SegWit.

 

El futuro de Bitcoin y SegWit

SegWit es sin duda un gran avance para la escalabilidad del Bitcoin. Pero muchos de sus detractores no le ven de esa manera. Uno de los principales argumentos en contra del nuevo protocolo, era que esta solución no termina de crear un nuevo Bitcoin escalable. Esto porque el aumento en la capacidad no es suficiente para cubrir la demanda creciente de transacciones. Si tomamos en cuenta otras blockchain en la que se manejan números tan grandes como 1500 TPS , que Bitcoin pueda manejar en el mejor de los casos 128 TPS usando SegWit y un tamaño de bloque ajustado a 32 MB, no lo deja bien parado.

Otro punto en contra de SegWit es que agrega una complejidad que consideran innecesaria al sistema de manejo de transacciones. Abogan por mantener código limpio y sin grandes dificultades para comprenderse, no solo por el bien de un desarrollo rápido, sino también en el ámbito de seguridad del software en si mismo. A su vez, sus detractores piensan que SegWit puede que no se vea ampliamente respaldado y adoptado por los principales desarrolladores de software para nodos y wallets de la comunidad. Afortunadamente, este ultimo punto no se ha cumplido, y SegWit es soportado por la mayoría de los desarrolladores de software Bitcoin que existen en la comunidad.

Por el lado de los mineros, estos podrían recibir menos comisiones por la verificación de transacciones SegWit. Pero en este caso, tal perdida de dinero podría verse compensada por la cantidad de transacciones que SegWit y Lightning Network permitirían manejar.

Pese a todo esto, hay muchos que apoyan el diseño y la implementación de SegWit. Los desarrolladores en pro de SegWit indican que su principal y mayor característica es que no rompe la compatibilidad del protocolo de generación y verificación anterior. Es decir, la existencia de SegWit como un soft fork permite la retrocompatibilidad de la blockchain entre distintas versiones de software que manejen los nodos de la red. Entre otras características sus desarrolladores sacan a relucir la siguientes:

  1. Evita que la blockchain se centralice. Con bloques más grandes, la necesidad de mejores conexiones de interne se hace evidente. Esto significa que se necesitan mayores recursos tecnológicos y económicos para correr nodos Bitcoin, lo que tiende a centralizar el poder el pocos nodos que cumplan tales condiciones.
  2. En consonancia con los recursos computacionales, SegWit mantiene ligera la blockchain y los recursos necesarios para desplegar un nodo. Con un tamaño de bloque pequeño son pocas las transacciones a verificar, y por lo tanto, poco el poder de computo necesario para su verificación. Esto evita que sea necesario CPU poderosos, o grandes cantidades de memoria RAM para desplegar un nodo Bitcoin, al contrario de otras blockchains.
  3. Agrandar el tamaño de los bloques, es también una solución a corto plazo. Puesto que a medida que la red aumente estos bloques se quedarán más y más cortos en espacio para cumplir con los requerimientos de sus usuarios. Al final esto lleva a la necesidad de aumentar el tamaño de los bloques nuevamente y un nuevo hard fork de la blockchain.
  4. Tal y como lo expresa el BIP141, SegWit permite aumentar el tamaño de los bloques, sin tener que romper la compatibilidad de la blockchain. El BIP141 permite que los bloques SegWit puedan escalarse hasta un máximo de 4 MB. Incluso podría llevarse hasta los 32 MB sin romper la compatibilidad y sin necesidad de hacer un hard fork.
  5. Si bien la escalabilidad de SegWit es bastante pequeña, la misma puede potenciarse en ordenes de magnitud gracias a Lightning Network. LN permitiría junto al uso de SegWit convertir a Bitcoin en una criptomoneda para realizar micropagos a niveles de miles de TPS sin suponer un embotellamiento de la misma.

En resumen, SegWit es una solución temporal y complementaria que busca aumentar la escalabilidad de Bitcoin. Todo ello al tiempo que mantiene la retrocompatibilidad de la blockchain original. Este ultimo aspecto es muy importante si tomamos en cuenta experiencias en este sentido. Como el caso del protocolo HTTP que hace posible el funcionamiento de la Web tal como la conocemos, o el sistema de transmisión NTSC de color y blanco-negro.

Sin dudas SegWit es un paso adelante en construir un Bitcoin altamente escalable, y de la mano a Lightning Network, le abre las puertas no solo a Bitcoin sino a sus derivados, a una escalabilidad sin precedente lista para ofrecer a sus futuros usuarios, lo que ha prometido desde sus inicios: rapidez, privacidad y libertad económica.

SegWit. Mejorando al Bitcoin
5 (100%) 3 votes
(Visited 106 times, 1 visits today)

Deja un comentario