Lo que debes saber sobre SegWit

0

Desde que bitcoin empezó a despertar un interés relativamente generalizado a mediados de 2017, quienes llevamos años trabajando con este criptoactivo fuimos testigos de la congestión de la red de pagos. La demora llegó a tal punto que las transacciones tardaban dos, tres, cuatro días en confirmarse, cuando en condiciones normales este proceso tarda entre 30 y 60 minutos. En los peores días de diciembre de 2017, ¡tuve una transacción que tardó casi una semana en confirmarse!

Es indudable que uno de los talones de Aquiles de bitcoin es su complicada escalabilidad causada por la falta de consenso entre los participantes de la red. Recuerdo al lector que la blockchain de bitcoin procesa alrededor de 7 transacciones por segundo versus las 15 tps de ethereum, las 190 de PayPal y las 2 mil de Visa. Actualmente, la capacidad de las cadenas de bloques, en general, es muy limitada. En vista de esta situación, los desarrolladores de bitcoin vienen trabajando en dos propuestas para escalar la red y permitir que las transacciones sean más rápidas y económicas: SegWit y Lightning Network.

“Segregated Witness” –SegWit, por sus siglas inglés– es el proceso mediante el cual se modifica el formato de las transacciones de bitcoin –al igual que las de litecoin, vertcoin y DigiByte– incrementando el tamaño del bloque de la cadena de bloques mediante la eliminación de los datos de las firmas que contiene cada transacción. Al eliminarse estos datos se libera espacio o capacidad para agregar más transacciones a cada bloque.

La blockchain de bitcoin consta de miles de nodos distribuidos alrededor del mundo en una red de iguales o P2P. Estos nodos actúan como administradores de las transacciones de bitcoin, las cuales se replican automáticamente en todos los nodos de bitcoin, haciendo que estos siempre tengan el mismo estado de red, es decir, una misma “verdad”.

¿Cómo funciona una transacción de bitcoin?

Supongamos que Juan quiere enviar una determinada cantidad de bitcoin a Marco. Las transacciones de bitcoin son muy diferentes a las de las monedas fiduciarias. Si Juan quiere pagar $2 a Marco, el primero simplemente toma el dinero físico de su billetera y se lo entrega al segundo. Como no existe una representación física de bitcoin, lo que se debe hacer es probar que, efectivamente, se posee esos bitcoins. La blockchain de bitcoin, a diferencia de una billetera de monedas fiat, registra la historia de cada una de las transacciones de bitcoin desde el 3 de enero de 2009, día en que se minó el “genesis block”.

Ahora bien, cada transacción de bitcoin que se replica en todos y cada uno de los nodos que forman parte de la red consta de dos componentes: entrada –input– y salida –output–. Puede haber una o múltiples entradas y salidas en cada transacción.

Entrada –input–

Volviendo al ejemplo de Juan y Marco, para que Juan pueda enviar bitcoin a Marco, el primero debe demostrar que es poseedor de una determinada cantidad de monedas que provienen de diferentes transacciones realizadas previamente. Supongamos que Juan obtiene sus monedas de tres transacciones previas, Tx(0), Tx(1) y Tx(2). Estas tres transacciones se juntarán dando como resultado la entrada –input– de la transacción a la cual llamaremos Tx(entrada).

Salida –output–

Básicamente, la salida contendrá una determinada cantidad de bitcoin que Marco posee luego de haber recibido la transacción de Juan, y el cambio que haya quedado de la transacción con Juan le es devuelto. Este cambio se convierte en el valor de entrada para las transacciones que Juan realice en el futuro.

Condiciones de una transacción

Para que una transacción sea considerada como válida debe cumplir con las siguientes condiciones:

  • Tx(entrada) > Tx(salida). En toda transacción, el valor de la entrada debe ser mayor al valor de la salida. El déficit entre la entrada y la salida (salida + cambio) es el pago o cuota que reciben los mineros por procesar y validar la transacción. Entonces: Costo de la transacción (fee) = Tx(entrada) – (Tx(salida) + cambio).
  • Tx(entrada) = Tx(0) + Tx(1) + Tx(2). Si Juan no tiene los fondos suficientes para efectuar la transacción a Marco, los mineros simplemente no la aceptarán.

Marco tendrá que demostrar que puede proporcionar la prueba necesaria para obtener los bitcoins de Juan. Juan bloqueará las transacciones con la dirección pública de Marco. Marco usará su clave o dirección privada para desbloquear esos fondos.

Juan, por su parte, también necesita demostrar que él tiene el derecho de enviar esos bitcoins a Marco. La forma en que lo hace es firmando la transacción con su firma digital –clave o dirección privada–. Cualquier persona puede conocer esta transacción usando la clave pública de Juan, con el fin de verificar que, efectivamente, él fue el que envió la transacción. Esta demostración o prueba se llama “datos de firma”.

Tanto la entrada –incluyendo los datos de firma– como la salida se juntan y se codifican o encriptan usando el algoritmo SHA 256. El “hash” resultante es conocido con el nombre de Tx ID, la identificación o nombre único que cada transacción recibe. Este es un ejemplo del “hash” de una transacción o Tx ID:

8bce4b56318843c2eb33ba506c9ff3ac5e7b28811e14079224b2d45ff4f156a3

La mayor parte de una transacción –el 65%– consiste de los “datos de firma” que es parte de una entrada –input–, la cual verifica que el emisor tiene suficientes fondos para llevar a cabo la transacción. En pocas palabras, un bitcoin se mueve desde una entrada hacia una salida en cada transacción transmitida. Una vez que los nodos han verificado que la transacción es válida, ésta es registrada en un bloque que se añade a la cadena de bloques para acceso público.

¿Cuál es el problema de escalabilidad?

El problema que enfrenta la plataforma de bitcoin es que, a medida que se realizan más y más transacciones, se deben agregar más bloques a la cadena. Los bloques se generan cada 10 minutos y están limitados a un tamaño máximo de 1 megabyte (MB). Debido a esta limitación de capacidad, únicamente se puede agregar un cierto número de transacciones a un bloque. Todas las transacciones que suceden en la cadena de bloques se llevan a cabo debido a que los mineros minan esos bloques y registran las transacciones en los bloques para validarlos.

El gran volumen de transacciones están causando serios retrasos en su procesamiento y verificación. En algunos casos, la validación puede tomar días. Originalmente, los bloques no tenían un límite de capacidad, sin embargo, Satoshi Nakamoto –el creador de bitcoin– se vio obligado a agregar un límite de capacidad para prevenir posibles ataques de denegación de servicio –DoS, por sus siglas en inglés–. Hackers y trolls podrían haber llenado los bloques con información basura con el fin de obstruir el sistema.

El Dr. Pieter Wuille –quien formuló el concepto de SegWit– sugirió que, para resolver este problema, la firma digital debe segregarse o separarse de los datos de las transacciones. La firma digital representa el 65% del espacio en una transacción determinada. SegWit intenta ignorar los datos adjuntos a una firma quitando la firma de la entrada y moviéndola a una estructura hacia el final de una transacción. Esto aumentaría la capacidad de cada bloque de 1 MB a poco menos de 2 MB –alrededor de 1,8 MB–. Además de aumentar el tamaño de los bloques, SegWit también resuelve la maleabilidad, eventual problema de seguridad en el que podría existir la posibilidad de interceptar y modificar la identificación de la transacción del remitente para robar monedas. Al separar los datos de las firmas de las entradas, la parte sin escrúpulos no tendría manera de cambiar la ID de la transacción sin anular la firma digital.

SegWit alivia el problema de escalabilidad de dos formas:

  1. Aumenta al doble la capacidad de transacciones que un bloque puede contener.
  2. SegWit permite la implementación de Lightning Network, una capa que se ejecuta por sobre la blockchain de bitcoin –y de otras criptomonedas–. Así, resuelve hipotéticamente el problema de escalado, al permitir que ocurra una cantidad ilimitada de transacciones instantáneas de bajo costo fuera de la cadena principal.
Pros de SegWit
  • Aumenta la cantidad de transacciones que un bloque puede realizar.
  • Disminuye las tarifas de las transacciones.
  • Reduce el tamaño de cada transacción individual.
  • Las transacciones se pueden confirmar más rápido, porque el tiempo de espera disminuye.
  • Ayuda en la escalabilidad de bitcoin, por ejemplo, al implementar el protocolo de Lightning Network.
  • Dado que la cantidad de transacciones en cada bloque aumentará, también aumentará la tarifa o comisiones que los mineros reciben.
  • Elimina la maleabilidad de las transacciones.
Contras de SegWit
  • Los mineros obtendrán menores tarifas de las transacciones individuales.
  • La implementación es compleja y todas las carteras o billeteras deberán implementarse por separado.
  • Aumentará significativamente el uso de recursos, ya que aumentará la capacidad, las transacciones y el ancho de banda.
  • La cadena lateral que contiene los datos de firma también deberá ser mantenida por los mineros. Sin embargo, a diferencia de la cadena de bloques principal, los mineros no tienen beneficios financieros al hacerlo. Tendrá que hacerse pro bono, o se debe pensar en algún esquema de recompensa para incentivar a los mineros.

Activación de SegWit

SegWit se activó el 24 de agosto de 2017. En la primera semana de octubre, la proporción de transacción con SegWit aumentó del 7% al 10%. SegWit no debe confundirse con SegWit2x que es una implementación que propuso la activación de SegWit en primer lugar para luego efectuar una bifurcación dura –hard fork– cuya principal característica era el aumento del tamaño del bloque a 2 MB. Esta propuesta contaba con el consenso del 90% del “hashrate” de bitcoin.

El 8 de noviembre de 2017, los desarrolladores de SegWit2x anunciaron que la bifurcación dura –hard fork– de la blockchain de bitcoin programada para el 16 de noviembre de 2017 se canceló por falta de consenso.

Para febrero de 2018, el 30% de las transacciones de bitcoin emplean SegWit.

¿Te gustó el artículo? ¡Puedes apoyar a Juan Francisco Bolaños en Patreon!

Deje un Comentario

Su correo electrónico no será publicado.