¿Qué es el peso del bloque y en qué se diferencia del tamaño del bloque?

Mientras leía sobre BIP141, encontré las siguientes opciones:

Block creation options:
-blockmaxweight=<n> Set maximum BIP141 block weight (default: 3000000)
-blockmaxsize=<n>   Set maximum block size in bytes (default: 750000)

¿Qué es un peso de bloque? ¿Es una representación entera del tamaño?

Respuestas (2)

El peso del bloque se define en el propio BIP 141 :

El peso del bloque se define como Tamaño base * 3 + Tamaño total. (justificación[3])

El tamaño base es el tamaño del bloque en bytes con la serialización de la transacción original sin ningún dato relacionado con testigos, como lo ve un nodo no actualizado.

El tamaño total es el tamaño del bloque en bytes con transacciones serializadas como se describe en BIP144, incluidos los datos base y los datos testigo.

La razón dada es:

Justificación del uso de una sola restricción compuesta, en lugar de dos límites separados, como datos base de 1 MB y datos testigo de 3 MB: el uso de dos límites separados haría que la extracción y la estimación de tarifas fueran casi imposibles. Los mineros necesitarían resolver un problema complejo de optimización no lineal para encontrar el conjunto de transacciones que maximiza las tarifas dadas ambas restricciones, y las billeteras no podrían saber qué pagar, ya que depende de cuál de las dos condiciones está más restringida por el Los mineros del tiempo intentan producir bloques con sus transacciones. Otro problema con este enfoque es la carga gratuita. Una vez que un conjunto de transacciones alcanza la restricción de 1 MB de datos básicos, se pueden agregar hasta 3 MB de datos adicionales al testigo con un aumento mínimo de la tarifa. En ese caso, el costo marginal del espacio adicional para los testigos se convierte efectivamente en cero.

entonces esta es una noción definida por el BIP141 no relacionada con el núcleo de bitcoin
Sí, eso es lo que parece.

Es un truco que aumenta el tamaño del bloque sin romper la compatibilidad con los nodos que no son de Segwit. Encontré este artículo de Jimmy Song más útil que tratar de entender el BIP.

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:

(tamaño de tx con datos de testigo eliminados) * 3 + (tamaño de tx)

Las transacciones que no son de Segwit tienen cero datos de testigo, por lo que el peso de una transacción que no es de Segwit es exactamente 4 veces el tamaño. Las transacciones de Segwit tienen algunos datos de testigos, por lo que el peso será menos de 4 veces el tamaño. Tenga en cuenta que las transacciones de Segwit se transmiten a los nodos heredados sin datos de testigos, 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.

Si llena un bloque con transacciones que no son de Segwit (0 bytes de datos testigo), el número de unidades de peso (WU) se calculará como

(1,000,000 B - 0 B) * 3 + 1,000,000 B = 4,000,000 WU

Pero el tamaño del bloque sigue siendo de 1.000.000 de bytes. Esto también significa que puede llenar un bloque con transacciones de Segwit, siempre que su tamaño, excluyendo los datos testigo, sea de 1 000 000 de bytes o menos. La razón por la que esto funciona es que los nodos que no son de Segwit no ven los datos testigo de las transacciones de Segwit, por lo tanto, no los cuentan para el tamaño del bloque.

A partir del 2018-01-21, ha habido varios bloques, como este , extraídos que superan 1 MB.