¿Cuál es el peso de un bloque que no contiene guiones de pago por testigo?

Estoy tratando de entender el peso del bloque, una métrica introducida por segwit ( BIP-141 ):

block weight = 3 * base size + total size

"tamaño base" es la longitud de un bloque pre-segwit, que contiene solo transacciones base serializadas. "tamaño total" es la longitud de un bloque post-segwit, que contiene transacciones base serializadas y transacciones testigo serializadas (como se define en BIP-144 ). El peso de cualquier bloque no debe exceder los 4 MB.

El peso de un bloque sin scripts de pago para testigos se puede encontrar calculando el tamaño total. Es tentador establecer el tamaño base igual al tamaño total:

block weight = 3 * base size + base size = 4 * base size

Pero esto supone que la duración de la serialización de una transacción base sin segwit es igual a la duración de la serialización de una transacción testigo sin segwit. Este no parece ser el caso:

Publicación por entregas

El formato de serialización de la transacción testigo parece seguir la estructura que se muestra arriba (que también es la entrada para encontrar wtxid). Observe dos bytes adicionales antes de la lista de entradas (marcador y bandera, respectivamente). Además, el testigo requiere al menos un byte (el recuento de campos testigo) incluso si no hay campos presentes.

En otras palabras, una serialización de transacción testigo siempre tendrá al menos tres bytes más que una serialización de transacción base, independientemente de si hay un testigo presente.

Si esto es correcto, entonces segwit de hecho está reduciendo el límite de tamaño de bloque para los bloques sin scripts de pago por testigo en un factor proporcional al número de transacciones en el bloque.

¿Qué me estoy perdiendo?

Respuestas (2)

El formato de serialización de testigos solo se aplica a las transacciones que tienen testigos. Si una transacción no tiene testigos, su formato de serialización testigo es el formato de serialización no testigo.

Del BIP 144:

Si el testigo está vacío, se debe utilizar el formato de serialización anterior.

Gracias - error tonto de mi parte. Incluso sabía que eso era lo que decía BIP-144 y de alguna manera lo olvidé.

Del BIP 144: Si el testigo está vacío, se debe usar el formato de serialización anterior.

Es ilegal codificar una transacción usando el formato de serialización extendido si el testigo está vacío. Otra forma de verlo es que cada transacción tiene un testigo, que puede estar vacío, y la forma correcta de codificar ese testigo vacío es usando el antiguo formato de serialización.

Esto también es válido para la serialización realizada con el fin de calcular el peso.

Una transacción que no sea testigo se contará 3 veces como su tamaño base (que es el tamaño de la serialización en el formato anterior) y luego una vez como su tamaño testigo (que nuevamente es el tamaño de la serialización en el formato anterior). El resultado es que el peso de una transacción sin testigos es solo 4 veces su tamaño anterior.