Aspectos Técnicos de Bitcoin

¿Qué Es Segwit? – Testigo Segregado

Qué Es Segwit

Testigo segregado o Segregated Witness, abreviado usualmente como SegWit, es una actualización implementada por Bitcoin Core en 2017.

No solo es una mejora que actualiza varios aspectos de Bitcoin, sino que también abre las puertas a futuras implementaciones, como lo es Taproot.

Primero y principal, SegWit corrige un problema llamado maleabilidad de la transacción. Del cual hablaremos más adelante en detalle.

También ayudo a incrementar el límite en el tamaño de bloque de Bitcoin. Lo que permite que más transacciones quepan dentro de él y así mejorar las comisiones de esta red.

Por último, SegWit introdujo dos nuevos tipos de scripts, que sirven para enviar y recibir BTC, y también un nuevo tipo de esquema de codificación llamado Bech32.

Sin embargo, a pesar de todas estas mejoras, la activación de esta actualización creo una gran división en la comunidad de Bitcoin. Por suerte, pudo alzarse y Bitcoin emergió más fuerte y con una mayor capacidad para escalar.

La conclusión de todo esto es que la descentralización peso más que lo que creía un grupo de mineros y líderes dentro de la comunidad.

Se trata de un soft fork, una actualización compatible con versiones posteriores que no necesita de todos los usuarios para actualizar la red.

El primero de agosto del 2017, Bitcoin finalmente implementa Segregated Witness en la red. Mientras una parte de la comunidad a la que no le gusto la iniciativa creó su propio hard fork llamado Bitcoin Cash con base en el mismo blockchain.

¿Cómo funciona SegWit?

Los datos de una transacción de Bitcoin contienen tres partes, las entradas, las salidas y el monto. La entrada es la dirección pública del remitente y la salida es la dirección pública del destinatario.

Cuando se envía una transacción, el remitente coloca la dirección del destinatario y envía el dinero. A su vez, la transacción posee una parte principal, que ocupa la mayor cantidad de datos, que es la firma que verifica que el remitente ha enviado el dinero, y una parte de la información (script) que verifica que el remitente tenga la cantidad de dinero necesaria para transferir el monto establecido.

SegWit funciona dividiendo en dos partes las transacciones a medida que se envían a la cadena de bloques (blockchain). Esto hace que las transacciones se muevan como si fueran una línea de montaje en lugar de que una sola persona cargue con todo el peso, ya que se pueden hacer la comprobación de las partes por separado.

Entonces la primera parte de la transacción contendrá los datos del remitente, del receptor y el monto. La nueva parte agregada al final contendrá los scripts y la firma.

Con esto, SegWit puede modificar el límite de bloques y cambiar el peso a 4 millones de unidades, lo que permite tamaños de hasta 4 MB por bloque. Esto se debe a que ahora habrá persona que comprueben una de la dos partes que mantiene el mismo tamaño de siempre y otras que lo harán sobre la parte nueva incrementada.

Pero a pesar del incremento, en la realidad se usan 2 MB como promedio, siempre y cuando la mayoría de las transacciones sean SegWit.

Litecoin fue una de las primeras monedas en implementar SegWit y terminó siendo un completo éxito desde la primera transacción. Desde entonces, Vertcoin, DigiByte, Groestlcoin y Bitcoin han añadido la tecnología en su red.

Volviendo a los niveles de la tecnología en tarjetas de crédito, Testigo Segregado permite que sea más fácil que capas y niveles sean agregados en pos de una mayor escalabilidad.

¿Qué es la maleabilidad de transacción?

La maleabilidad de transacción es la posibilidad de que una transacción tenga múltiples IDs de transacción válidos.

La maleabilidad ocurre cuando una parte de la transacción es modificada luego de que esta haya sido firmada, lo cual no invalida la firma.

Debido a que el ID de la transacción es un hash de la misma, cualquier cambio en la transacción resultara en un cambio del ID. Sin embargo, aquí no nos preocupan los cambios que alteren el ID e invaliden la firma, sino los cambios que alteren el ID que no hacen que la firma sea inválida.

¿Por qué es un problema?

Se trata de un problema para los desarrolladores y usuarios que quieren hacer referencia a una transacción anterior a la hora de gastar la salida de esta, la UTXO, antes de que haya sido confirmada por la cadena de bloques.

El problema surge cuando se modifica este ID de transacción, entonces no podemos referenciar a la transacción anterior, lo que hace que el gasto de la misma sea visto por la red como inválido.

Este problema ha tenido su protagonismo en eventos como el de Mt. Gox, ya que su CEO justifico la perdida de fondos debido a este bug. Sin embargo, también cobro importancia a la hora de adoptar la red Lightning, que requiere el intercambio de transacciones sin confirmar de Bitcoin.

¿Como lo corrige SegWit?

Una transacción puede ser afectada con este problema de dos formas:

  1. Luego de que la transacción es firmada, más información se puede agregar al ScriptSig, la parte de la transacción donde se encuentran las firmas y otra información necesaria para desbloquear los bitcoins.
  2. La firma en sí, que se encuentra dentro del ScriptSig, puede ser modificada.

Estas dos circunstancias pueden suceder, ya que la firma no pueden firmarse a sí misma, lo que ocasiona que no pueda volverse auto inmutable.

Debido a que el ScriptSig y la firma que contiene son parte de la pre imagen del ID, si se cambian, también se modifica el ID de transacción.

SegWit elimina esta posibilidad al eliminar toda la información del ScriptSig. Esto se consigue al mover la información del ScriptSig, usualmente la firma y la clave pública, al testigo (Witness). Esto último es una nueva parte de las transacciones SegWit que no son utilizadas para el hash del cálculo del ID.

Así, el ScriptSig de la entrada de SegWit es construido de manera inmutable luego de la firma, y la información para desbloquear los bitcoins, que no es inmutable, son almacenadas en el testigo.

Esto permite que el ScriptSig no pueda ser modificado, y, por tanto, el ID de transacción no pueda ser cambiado sin hacer inválida a toda la transacción.

SegWit permite la red Lightning

La activación de SegWit es muy importante para Lightning Network, una tecnología de segunda capa que funciona por encima de la red de Bitcoin.

Antes de que se activara esta mejora, Lightning Network no funciona correctamente debido a que confiaba profundamente en las transacciones sin confirmar de Bitcoin. Por eso, la maleabilidad de las transacciones era un riesgo muy grande, y una fuente de ataque para esta solución.

SegWit y el incremento del tamaño del bloque

Si bien SegWit es un soft fork, altera una parte muy importante del conjunto de reglas de consenso de Bitcoin. Básicamente, incrementar de manera compatible hacia atrás el número de transacciones que pueden entrar dentro de cada bloque.

Antes de SegWit, cada bloque tenía un límite de 1 MB, lo cual equivale a un aproximado de 1.650 transacciones. Hay que considerar que no todas las transacciones son iguales.

SegWit introdujo un concepto interesante que es el del peso del bloque, que reemplaza al tamaño del bloque como factor que limita a este. Actualmente, un bloque pueden contener un promedio de 2.700 transacciones.

El peso del bloque es medido en unidades de peso. Un byte de una transacción que no utiliza SegWit, vale 4 unidades de peso. Mientras que un byte en SegWit vale 1 unidad de peso.

El límite al peso de un bloque es de 4 millones de unidades. Por lo que si tenemos un bloque lleno de transacciones que no son SegWit, el límite de 4 millones es equivalente al millón de bytes previos a esta mejora.

Esta nueva forma de medir permite que el tamaño del bloque se incremente, utilizando un soft fork que es compatible mientras le ofrece a los mineros y a los usuarios un incentivo por usar SegWit:

  • Los usuarios pueden usar SegWit para ahorrar comisiones en las transacciones, debido a que la información en el testigo ocupa menos.
  • Los mineros pueden incluir transacciones SegWit para incluir más información dentro de un bloque y así obtener más ganancias.

Nuevos tipos de scripts de transacciones gracias a Segwit

Los tipos de script son diferentes formas de enviar bitcoins en la cadena de bloques usando el lenguaje de scripting de Bitcoin, llamado Script.

SegWit introduce dos nuevos tipos en función de que pueda hacer uso del campo testigo.

Pay to Witness PubKey Hash (P2WPKH)

Antes de SegWit, una gran mayoría de usuarios utilizaban Pay to Pubkey Hash (P2PKH), que bloqueaba los BTC con el hash de la clave pública.

El script de SegWit, Pay to Witness Pubkey Hash (P2WPKH), funciona similar a este anterior, con una importante diferencia. Cuando el usuario envía una salida P2WPKH, la firma y clave pública, las dos piezas de información para desbloquear las salidas en P2PKH y P2WPKH, son almacenadas en el testigo, mientras que el ScriptSig se encuentra en blanco.

Esto se hace para prevenir la maleabilidad del ID de la transacción.

Pay to Witness Script Hash (P2WSH)

Otro script muy popular, pero que ahora ha quedado antiguo, es Pay to Script Hash (P2SH), que permite enviar bitcoins al hash de un script, llamado redeemScript.

Estos BTC pueden ser reclamados por cualquier que pueda proveer el redeemScript y así completar el requerimiento específico.

Antes de SegWit, P2SH era la forma más común de utilizar multi firma, además de ahorrar espacio y obtener mayor privacidad en comparación a las alternativas.

SegWit implemento Pay to Witness Script Hash (P2WSH), que funciona de manera similar a P2SH (ambos scrips pueden ser visto como evoluciones).

Las salidas de P2WSH pueden ser gastadas al proveer el script testigo, el equivalente en SegWit al redeemScript, y la firma y clave pública requerida por el script testigo.

Wrapped SegWit

La introducción de estos dos nuevos tipos de scripts fueron cambios muy grandes para el protocolo de Bitcoin, ya que permitieron crear nuevos tipos de monederos, aplicaciones y servicios que antes no eran posibles.

En función de poder hacer que la adopción de SegWit sea más fácil e incremental, se construyo un puente entre los scripts antiguos y las opciones de SegWit.

Este puente es llamado Wrappet SegWit, y es un script P2SH. Este puente toma un script nativo de SegWit, P2WPKH o P2WSH, y lo utiliza como un redeemScript de un script P2SH. Los dos scripts de Wrapped SegWit usan P2SH-P2WPKH y P2SH-P2WSH.

Esto permite que los monederos y otros software antiguos puedan enviar bitcoins a direcciones SegWit, aun cuando no birnden soporte a esta nueva tecnología. Así, los destinatarios de las transacciones Wrapped SegWit pueden gastar sus BTC y conseguir los beneficios de SegWit, como el ahorro en comisiones.

Nuevo esquema de codificación con SegWit

La mejora de SegWit también introduce un nuevo esquema de codificación para las direcciones SegWit, llamado Bech32.

Anterior a SegWit, las direcciones de Bitcoin y claves privadas eran codificadas utilizando Base58, un esquema que utiliza mayúsculas y minúsculas.

Bech32 fue propuesto y aceptado como una mejora a Base58 debido a que nunca utiliza una mezcla de letras mayúsculas y minúsculas, haciendo que sea más legible, fácil de leer y transcribir, y más adecuado para los códigos QR.

Además, Bech32 fue construido con una detección de errores que ayuda al usuario y a los monederos a detectar y hasta corregir errores de tipeo o cambios en las direcciones.

Bech32 hace también que las direcciones nativas de SegWit sean fácilmente reconocibles, ya que solo usa letras en minúscula y comienzan con bc1.

Ya que Bech32 utiliza 32 caracteres, estas direcciones son un poco más largas que las Base58, pero ocupan menos espacio en la cadena de bloques.

Ventajas de SegWit

  • Transacciones más rápidas: el objetivo principal de SegWit no es hacer las transacciones más rápido, sino permitir que se trabaje con distintos tipos de bloques. Sin embargo, indirectamente permite confirmaciones más rápidas al establecer datos más pequeños.
  • Transacciones más baratas: las comisiones por las transacciones se reducen con SegWit porque la tecnología permite una mayor capacidad y las firmas se ponderan de manera diferente.
  • Transacciones más seguras: SegWit hace más difícil hackear la red debido a que tercerizar el trabajo.
  • Más transacciones: cuando se implementó SegWit rápidamente se vio una disminución en el grupo de memoria, que contiene todas las transacciones sin confirmar. Se vio que las transacciones decrecieron del nivel de 140 millones de bytes a solo 6 millones de bytes mientras el número de transacciones se mantenía inmutable.
  • Lightning Network: Lightning Network es una tecnología de capa 2 que permite a dos personas realizar transacciones muchas veces.

Historia de la activación de SegWit

A pesar de todas estas mejoras que hemos estado hablando, SegWit no fue una activación sencilla par el ecosistema de Bitcoin.

Fue tan controverisla en la comunidad que ha creado un imapcto importante, genrando hard forks y otros intentos por conseguir un tamaño de bloque mayor pero si utilizar esta tecnología.

SegWit fue propuesta en 2015 por Bitcoin Core en función de resolver los problemas de maleabilidad de las transacciones y librar espacio en la cadena de bloques.

Sin embargo, durante este tiempo, otros miembros de la comunidad, preocupados por la imposibilidad de escalar de esta criptomoneda y poder procesar una mayor cantidad de transaccione,s propusiero un aumento del tamaño del bloque.

En principio no estaban d acuerdo con integrar SegWit y solo se centraban en auemntar el bloque, pero con el tiempo dieron el brazo a torcer ante la posbilidad de implemenetar estas dos cosas juentas. Por un aldo SegWit y por el otro aumentar el tamaño del bloque a 2 MB.

Esta mejora tenia el nombre de SegWit2x, y consiguio el paoyo del 95% de los mineros, algo que se pudo medir a tra’ves del hash rate.

Más de 50 negocios dentro de la industria de Bitcoin firmaron u nacuerdo llamado el Acuerdo de Nueva York, en donde se ocmprometian a actibar SegWit y duplicar el tamaño del bloque.

Este acuerdo era un alejamiento del proceso de consenso de código abierto de Bitcoin. Por esta razon es que no consiguio el suficiente apoyo por parte de los nodos y desarrolladores, lo que lo llevo a fracasar.

En su lugar, una propuesta de un desarrollador, la BIP 148, gano apoyo entre los oepradores de nodos y fue capaz de implekentar SegWit mientras recahzaba SegWit2x.

En función de empijar este cambio, muchos nodos comenzaron a correr implementaciones alternativas de Bitcoin Core, que obligo a los mineros a adoptar SegWit o correr el riesgo de que sus bloques sean rechazados.

¿Por qué se oponían a SegWit2x?

Los operadores de nodos son los que almacenan la cadena de bloques completa, y muchos utilizan pequeños ordenadores con recursos muy escasos para hacerlo.

SegWit2x significaba que la blockchain crecería el doble de rápido, obligándolos a almacenar más información que de costumbre.

Esto aumentaría los costos de operar un nodo, haría más lento la descarga inicial de bloques y desincentivaría a correr un nodo.

Muchos desarrolladores también estaban en contra de SegWit2x por razones similares. Tenían miedo de que al haber menos personas corriendo nodos, la red podría volverse más centralizada y menos resistente a la censura.

¿Cuál es la conclusión de SegWit?

La pelea entre adoptar SegWit y SegWit2x demostró que los nodos, no los mineros u otras entidades, o incluso los desarrolladores, controlan la red.

Los nodos corren sus propias versiones de software de Bitcoin, superando a la mayoría de los mineros y llevando a que finalmente se implemente SegWit.

Esto nos puede dar confianza de que los usuarios de Bitcoin quieren mantener las reglas de esta criptomoneda, incluyendo el límite fijo de 21 millones.

Resumen

  • Segregated Witness o SegWit es una mejora de Bitcoin que fue activad en 2017 y arregla el problema de la maleabilidad de las transacciones. Todo mientras ayuda a escalar a esta criptomoneda.
  • SegWit hace posible que funciona la Lightning Network, una solución que funciona en una segunda capa.
  • La activación de SegWit también demostró la antifragilidad de Bitcoin, al ser un sistema controlado por los nodos y no por los mineros o negocios.

Acerca del autor

Nicolas Mandarieta

Desarrollador de software, gamer, geek y amante de la pizza.

Agrega un Comentario

Haz clic aquí para añadir un comentario