¿Cómo reduce SegWit el tamaño de la transacción, cuando la firma simplemente se mueve a otra parte de la transacción?

Este video explica que la firma se movió fuera de la sección de entrada y se movió a la nueva llamada testigo . Por lo que puedo decir, la firma del testigo todavía está contenida en esta transacción. ¿Cómo podría un simple reordenamiento de la información crear mágicamente más espacio?

He leído detenidamente otros artículos y videos y ninguno de ellos parece abordar esta "magia".

Respuestas (2)

TL; DR :
SegWit no reduce el tamaño de la transacción, si se refiere a la longitud de bytes sin procesar de las transacciones. En su lugar, introduce el peso del bloque como una nueva métrica que no se corresponde directamente con la longitud de bytes sin procesar de las transacciones, sino que trata los datos de los testigos como si tuvieran menos peso que otras partes de la transacción.


El límite de bloques de Bitcoin se ha cambiado con la activación de segwit. Los bloques solían estar limitados a 1.000.000 de bytes (1 MB). Desde segwit están limitados a 4.000.000 de unidades de peso.

A la hora de calcular el peso de una transacción, los bytes se pesan de forma diferente según formen parte del testigo o no:

  • Un byte no testigo pesa cuatro unidades de peso.
  • Un byte testigo pesa una unidad de peso.

Esto tiene el efecto de que una transacción sin segwit aporta exactamente la misma parte del límite que antes. Por ejemplo, la longitud de bytes sin procesar de una transacción P2PKH con una entrada y dos salidas es de 222 bytes y, por lo tanto, pesa 888 WU, es decir, 222B / 1 000 000 B = 888 WU / 4 000 000 WU. Esto significa que para las transacciones que no son segwit, el límite de peso de bloque tiene exactamente el mismo efecto que el límite de tamaño de bloque que tenía antes, y es compatible con versiones anteriores.

Sin embargo, para las transacciones de segwit, el peso no es el cuádruple del tamaño de la transacción sin procesar. Por ejemplo, la longitud de bytes sin procesar de una transacción multisig P2SH-P2WSH 2 de 3 con una entrada y dos salidas es de 409 bytes, pero su peso es de 868 WU, ya que una gran parte de la entrada de la transacción son datos testigo. Por lo tanto, una transacción de segwit tomará una porción más pequeña del límite de peso de lo que sugeriría su longitud de bytes sin procesar.

Para permitir una comparación más fácil con las tasas de tarifas heredadas, el peso del bloque a menudo se expresa como "tamaño virtual" en "bytes virtuales" o "vbytes". El tamaño virtual se calcula dividiendo el peso de una transacción por cuatro y redondeando al número entero. Para transacciones sin segwit, la longitud de bytes sin procesar y el tamaño virtual son iguales.

En conclusión, la longitud de bytes sin procesar de los bloques ahora puede superar los 1 000 000 B, pero el tamaño virtual no puede superar los 1 000 000 vB.

Entonces, el peso debe ser una capa de abstracción, porque cuando tengo un bloque que quiero almacenar en el disco, consume BYTES. O cuando transfiero el bloque a través de la red, se calculan los mismos bytes. ¿Un bloque SegWit máximo transferiría 4 Megabytes? Me preguntaba si el "peso" solo es relevante para el cálculo de la tarifa.
@pebwindkraft : Creo que 3,7 MB es el tamaño máximo que se puede lograr, ya que es imposible colocar todos los datos en el testigo. No sé a qué te refieres con "capa de abstracción", pero la capacidad del bloque se define en peso . Es a partir de ese límite de peso de bloque que se deriva la relevancia del peso para la tarifa.
sí, gracias, la capacidad del bloque es esta "capa de abstracción" (tal vez no sea la palabra correcta, ya que no soy un hablante nativo). Realmente estaba pensando en bits y bytes, que se almacenan en el disco (o también se transfieren a través de las conexiones de red). Entonces, la capacidad del bloque ("peso") y la capacidad del disco son algo diferente. Esa fue la parte confusa. Sipa mencionado aquí ( bitcoin.stackexchange.com/questions/58018/… ), el tamaño del bloque aumentaría. Como es el "padrino de segwit", confío en él :-) ¡Segwit mola!
@pebwindkraft: el tamaño virtual de las transacciones es estrictamente menor o igual al tamaño de la transacción sin procesar, ya que se descuenta parte del tamaño sin procesar. Por lo tanto, si el límite de tamaño virtual es igual al límite de tamaño de bloque anterior, el espacio de almacenamiento real puede superar el límite de tamaño de bloque anterior. Un hecho también observable en el gráfico más bajo aquí: segwit.party/charts
La respuesta corta a la pregunta del título es simplemente que SegWit no reduce el tamaño de la transacción (cuando el tamaño significa bytes). Lo que hace es definir un nuevo concepto como 'tamaño', que ya no corresponde directamente al tamaño del disco. En este nuevo tamaño, el testigo se descuenta y, por lo tanto, para todos los efectos, las transacciones se vuelven 'más pequeñas'.
@PieterWuille: Gracias, agregué un TL; DR, inspirado en este comentario.

segwit ES un aumento del límite de tamaño de bloque. sin magia

El mecanismo segwit impone un límite en un tamaño de datos ponderado calculado contando la parte no firmada de una transacción como datos base (peso = 4) y para contar los datos firmados a una tasa de descuento (peso = 1). El total de los tamaños de transacción ponderados del bloque (llamado "peso del bloque") está limitado a 4 MB. Los clientes no actualizados solo verán los datos básicos y aplicarán el antiguo límite de 1 MB como antes.

Así que ahora puedes ver cómo aumenta el tamaño del bloque. Si todas las transacciones tienen (casi) cero datos base y en su mayoría datos de firma, el tamaño real del bloque puede ser de hasta 4 MB. Si las transacciones tienen en su mayoría datos base y cero datos de firma, el tamaño del bloque solo puede ser de hasta 1 MB. El caso real siempre estará en algún punto intermedio, por lo tanto, un aumento en el espacio de bloque.