¿Cuál es el límite de tamaño de bloque después de segwit y cómo tratan los nodos heredados las transacciones de segwit?

Normalmente, escuché que el tamaño de bloque de bitcoin es de 1 MB, pero con la actualización de Segwit, el tamaño de bloque puede ser de hasta 4 MB, por lo que deberíamos decir que el tamaño de bloque es de 4 MB, ¿verdad? Además, los nodos heredados solo reciben los datos de entrada y salida de las transacciones de segwit. ¿Cómo verifican los nodos heredados la validez de las transacciones segwit? El nodo heredado puede verificarlo durante la propagación desde un nodo segwit, pero ¿cómo funciona para la propagación entre dos nodos heredados, donde los datos segwit faltan por completo? Gracias

Respuestas (2)

Normalmente escuché que el tamaño de bloque de bitcoin es de 1 MB, pero con la actualización de Segwit, el tamaño de bloque puede ser de hasta 4 MB, por lo que deberíamos decir que el tamaño de bloque es de 4 MB, ¿verdad?

Antes de la activación de segwit, el bloque estaba limitado a 1.000.000 de bytes. Este límite fue reemplazado por un límite de peso en bloque de 4 000 000 de unidades de peso (WU) con la activación de segwit. Un byte de datos testigo aporta 1 WU y un byte de datos no testigo aporta 4 WU hacia el límite. Teóricamente, el bloque podría tener hasta 4.000.000 de bytes si estuviera compuesto exclusivamente por datos testigo. En la práctica, se espera que incluso los bloques que consisten solo en transacciones segwit terminen en el rango de 2,1 a 2,7¹ MB debido a los datos no testigos que las transacciones siempre tienen. Por lo tanto, el tamaño de bloque ya no es el término correcto para el límite, sino que deberíamos decir que "el límite de peso de bloque es 4 MWU" .

Además, los nodos heredados solo reciben los datos de entrada y salida de las transacciones de segwit. ¿Cómo verifican los nodos heredados la validez de las transacciones segwit? El nodo heredado puede verificarlo durante la propagación desde un nodo segwit, pero ¿cómo funciona para la propagación entre dos nodos heredados, donde los datos segwit faltan por completo?

La identificación de la transacción (txid) de las transacciones segwit se calcula a partir de la transacción eliminada, es decir, los datos de la transacción excluyen los datos testigo. Esto tiene dos efectos: uno, los nodos heredados usan el mismo identificador para las transacciones de segwit que los nodos completos. Dos, el txid de una transacción sin firmar es el mismo que el de la transacción firmada (útil para configurar contratos inteligentes, por ejemplo, canales LN). Cuando un nodo heredado solicita una transacción segwit, el otro nodo reconoce que el nodo solicitante está en una versión obsoleta y les proporciona la transacción eliminada. Los nodos heredados también pueden transmitir la transacción eliminada entre sí. Para cubrir las firmas, las transacciones segwit también tienen una identificación de transacción testigo (wtxid) que cubre todos los datos de la transacción firmada. Los bloques Segwit también deben comprometerse con las transacciones firmadas, ¡aunque! Con ese fin, se construye un segundo árbol de Merkle a partir de los wtxids. La raíz de Merkle del árbol wtxid se almacena como el "compromiso de testigo" en una salida OP_RETURN en la transacción de coinbase. Esto se suma a la raíz de Merkle regular en el encabezado del bloque que se compromete con los txid de las transacciones y permanece legible para los nodos heredados.

Los nodos heredados llegan al mismo conjunto de UTXO, porque las transacciones eliminadas especifican qué UTXO se gasta en las entradas y qué nuevo UTXO se crea. Dado que los nodos heredados no conocen los datos testigo, no pueden verificar las firmas de las transacciones segwit. Por lo tanto, los nodos heredados no son nodos de validación completa (nodos completos) que aplican todas las reglas del protocolo Bitcoin de forma independiente (específicamente, no aplican las reglas de segwit). Las transacciones de segwit parecen válidas para los nodos heredados, ya que las entradas parecen ser "cualquiera puede gastar" según su comprensión fechada de las reglas del protocolo de Bitcoin.


¹ El 11 de agosto de 2022, el bloque 748 918 alcanzó un tamaño de 2 765 062 B, superando ese rango estimado por primera vez al incluir muchas entradas de 2 de 3 P2WSH. H/T @bordalix por señalar esto.

solo para informarles que el bloque 748918 tiene un tamaño de 2.77 MB
Gracias, actualicé mi respuesta y tuiteé al respecto :)
  1. Por lo tanto, el testigo segregado aprovecha esta oportunidad para aumentar el límite de tamaño de bloque a casi 4 MB y agrega un nuevo límite de costo para garantizar que los bloques permanezcan equilibrados en el uso de recursos (esto da como resultado un límite efectivo más cercano a 1,6 a 2 MB).

https://bitcoincore.org/es/2016/01/26/segwit-benefits/#block-capacitysize-increase

  1. El tamaño máximo de bloque es de 4 000 000 bytes (4 MB). Esto se debe a que el cálculo del peso del bloque es tamaño base (en MB) * 3 + tamaño total (en MB) = peso del bloque (ver BIP 141). Dado que las únicas unidades son MB, las únicas unidades del peso del bloque también son MB, por lo que el tamaño máximo del bloque es el mismo que el peso del bloque.

En teoría, puede acercarse bastante a 4M, al tener transacciones que consisten casi en su totalidad en datos de testigos. En la práctica, eso no sucederá con las transacciones financieras normales, más cercanas a 2M.

https://bitcoin.stackexchange.com/a/54949/

  1. SegWit simplemente le permite verificar datos de transacciones que no son testigos sin descargar (y luego descartar) los testigos, lo que resuelve el problema de los clientes ligeros que tienen que descargar cosas que no les interesan y que de todos modos no pueden verificar.

https://blockstream.com/2017/07/31/en-segwit-myths-debunked/

  1. Cuando las transacciones de Segwit se envían a los nodos heredados, los datos testigo se eliminan. La clave es que estas transacciones "despojadas" siguen siendo transacciones válidas en los nodos heredados, lo que nos brinda ahorros en comparación con las transacciones que no son de Segwit. Por lo tanto, pueden caber más transacciones en el bloque enviado a los nodos heredados sin superar el límite de 1.000.000 de bytes.

Los nodos de Segwit obtienen transacciones y bloques de Segwit que incluyen los datos de testigo mediante mensajes de red alternativos. Los nuevos mensajes de red se definen en BIP144 como parte de Segwit. Los bloques Segwit que incluyen los datos testigo pueden tener más de 1.000.000 de bytes. Los nodos heredados, como se mencionó, reciben los mismos bloques y transacciones, pero con los datos testigo eliminados. Esta es una forma de hacer de Segwit un tenedor suave.

Los bloques Segwit están restringidos por algo llamado Peso del bloque. Block Weight es un nuevo concepto introducido en Segwit, y se calcula por transacción.

Cada transacción tiene un "peso" que se define de esta manera:

(tx size with witness data stripped) * 3 + (tx size)

Las transacciones de Segwit se transmiten a los nodos heredados sin datos testigo, por lo que esta fórmula siempre dará como resultado bloques comunicados a los nodos heredados que son menores o iguales a 1 000 000 de bytes. Una vez más, esta es la razón por la que Segwit es una bifurcación blanda.

https://link.medium.com/3lvCPzo5q9

  1. Tamaño vs peso: ¿Qué es el peso del bloque y en qué se diferencia del tamaño del bloque?