El concepto de peso de bloque y segwit aún no está claro

Parece una pregunta duplicada, pero leí muchos artículos y publicaciones para entender sobre segwit.

Los siguientes enlaces son algo que leí.

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

Después de la activación de Segwit, ¿cuál es el tamaño de bloque más grande posible?

Comprender el tamaño del bloque Segwit

Peso del bloque

Pero necesito un ejemplo para aclarar el peso del bloque T_T

En el artículo Comprender el tamaño del bloque Segwit , el escritor dijo que

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)

Creo que el tamaño de tx es

tx = transactions + witness data

Luego me quedé atascado en la recursividad ... No puedo entender.

A mí me parece contradictorio.

Porque para definir un tamaño de tx, necesita el peso del bloque para restringir el tamaño de los datos testigo. Pero para obtener un peso, necesita un tamaño de tx.

Entendí que si no hay datos de testigos, el tamaño máximo de bloque es 1 mb (antes de segwit). Sí, está claro. Pero algunas personas usan el mismo peso que el byte.

Por ejemplo, algunas personas dijeron (especialmente bitcoin wiki - Peso del bloque )

weight = 1mb * 3 + 1mb = 4mb

Y otros dijeron (¿ Qué es el peso del bloque y en qué se diferencia del tamaño del bloque? )

Incluso en esta publicación, Sam Jone dijo 4,000,000 WU pero el bloque sigue siendo de 1mb

weight = 1mb * 3 + 1mb = 4,000,000 Weight unit(WU) Or 4mWU

cual es la expresion exacta

y si no hay datos de testigos, ¿qué quedan 3mb o 3mWU llenos? esta vacio?

En el bloque #577639 , el tamaño del bloque es 1158,038 kB

¿Cómo se almacenan los datos de los testigos?

Transacción de 1 MB + datos de testigo, ¿verdad...?

o

¿El bloque de 1mb es compartido por transacciones y datos testigo?

El concepto básico de segwit es mantener un tamaño de bloque de 1 mb para transacciones y agregar datos testigo, ¿no?

¿Significa que el tamaño de las transacciones (se excluyen los datos de testigos) es 1158.038kB? o transacciones + datos de testigos es 1158.038kb?

Como sabemos, el peso máximo del bloque es 4mWU o 4mb. Por lo tanto, si las transacciones sin datos de testigos son de aproximadamente 1,1 MB, parece extraño

block weight = 1.1mb * 3 + (1.1mb + witnessdata)

Porque es más grande que el tamaño máximo posible.

Si las transacciones + los datos de los testigos ocupan aproximadamente 1,1 MB

block weight = (1.1mb - witnessdata) * 3 + 1.1mb

este cálculo parece más razonable. Pero si los datos testigo son inferiores a 0,1 mb, el peso del bloque es superior a 4 mb. ¿Es posible que haya tan pocos datos de testigos?

Y si solo hay datos de transacción y no hay datos de testigo como datos de transacción de 1 mb y 0 datos de testigo (el peso del bloque es 4 mb o 4 mWU, que es el tamaño máximo teórico), entonces, ¿cómo se resuelve el problema de maleabilidad de transacción ?

Lo siento mucho. Las preguntas son bastante largas, pero espero que puedan ser útiles no solo para mí sino también para las personas que están estudiando sobre blockchain.

Gracias por leer

Respuestas (1)

Eche un vistazo: https://blockchair.com/bitcoin/block/0000000000000000000cbbceb342e07071f9621607e044ec909aa86fcdf88e8a

Size = 1,158,038 bytes
Weight units = 3,992,825 WU

Ahora, ¿qué significa? Entonces, el tamaño es lo que probablemente entienda bien: cuando tiene un archivo en el disco, su tamaño se mide en bytes y esto es exactamente lo que significa el tamaño aquí. Es la cantidad de bytes que necesitaría para almacenar dicho bloque en la memoria o en el disco. Esta es la suma de datos no testigos (nWD) y datos testigos (WD). Llamemos a esto el tamaño absoluto para mayor claridad (AS).

También hay algo llamado tamaño virtual (VS). Este es un nuevo concepto, que mide el bloque en nuevas unidades, llamadas vBytes. Se calcula como (tamaño absoluto de datos no testigos) + (tamaño absoluto de datos testigos)/4.

El peso del bloque (BW) se calcula en unidades de peso y se calcula como (tamaño absoluto de datos no testigos) * 4 + (tamaño absoluto de datos testigos). Esto en realidad es igual a lo que ha mencionado en su publicación: (tx size with witness data stripped) * 3 + (tx size)porque la transacción en sí contiene datos de testigos y no testigos.

Entonces, ahora sabemos que:

AS = 1,158,038 bytes = nWD bytes + WD bytes
BW = 3,992,825 WU = nWD * 4 weight units + WD weight units

¿Cuáles son los límites en el protocolo? Actualmente ya no hay límite de tamaño de bloque. Solo hay un límite para el peso del bloque. Este límite se establece en 4.000.000 WU. De ello se deduce que en el caso de un bloque sin Segwit txs, el peso de cada byte es de 4 WU, por lo tanto, dicho bloque sin Segwit txs está limitado por un tamaño absoluto de 1 MB.

Los bloques que contienen Segwit txs pueden ser más grandes que eso y hay algunos cálculos teóricos que dicen que puede llegar a algo así como 3,7 MB de tamaño absoluto de un bloque. Pero este límite teórico es sólo eso: teórico. En la práctica, incluso si el bloque estuviera lleno de Segwit txs, su tamaño absoluto no alcanzaría este límite.

Actualmente, la mayoría de los bloques contienen txs: Segwit y legado, por lo que vemos que los tamaños de bloque de los bloques completos generalmente están en el rango de 1 a 2,2 MB. El bloque está lleno si su peso está muy cerca del límite del protocolo de 4 000 000 WU.

Esto implica que no es correcto pensar que un bloque de tamaño 1,1 MB está compuesto por 1.000.000 bytes de nWD y el resto es WD. Eso no funcionaría porque el peso de 1,000,000 bytes nWD ya sería 4,000,000 WU y, por lo tanto, si le agregamos el peso de WD, estaríamos por encima del límite. Eso no es posible.

Entonces, si sabemos AS = 1,158,038 KB, entonces es más bien que hay 944,929 bytes de nWD con un peso de 3,779,716 WU y el resto son 213,109 bytes de WD con un peso de 213,109. Esto hace que el peso total del bloque sea 3.779.716 + 213.109 = 3.992.825 WU.

Ahora podemos calcular VS:

VS = nWD vBytes + WD/4 vBytes = 944,929 + 213,109 / 4 = 998,206.25 vBytes

Por lo tanto, el tamaño virtual (VS) no puede ser superior a 1 000 000 vBytes, por lo que esto es lo que significa si alguien dice que el nuevo tamaño de bloque todavía está limitado por 1 MB; en realidad, significa 1 millón de vBytes.

wow.. realmente muy claro. ¡Muchas gracias! pero "Actualmente, la mayoría de los bloques contienen ambos txs - Segwit y legado". ¿ Esta oración significa que incluso el último bloque aún incluye una transacción heredada que tiene un script dentro?
Incluso los últimos bloques contienen transacciones que no son de Segwit. Pero debido a que también contienen transacciones Segwit, todo el bloque es Segwit. No estoy seguro de lo que quieres decir con "script inside". El script se usa tanto en transacciones Segwit como no Segwit. Debido a que este tema es muy amplio, considere hacer varias preguntas con un alcance limitado.
Muchas gracias muy útil. Que tengas una buena semana:)