¿Cómo puede Segwit aumentar el rendimiento de las transacciones si se almacena la misma cantidad de datos en la cadena de bloques?

Estoy publicando esto después de leer las respuestas a esto: ¿ Dónde se almacena la firma en una transacción de SegWit?

Descubrí al leer eso, que en Segwit, los "testigos" (o firmas) que verifican la autenticidad de una transacción todavía se almacenan en la cadena de bloques. En cuyo caso, una transacción dada debería usar la misma cantidad de bits que si no se usara Segwit. Si el tamaño del bloque sigue siendo el mismo, digamos 1 MB, entonces debería contener exactamente la misma cantidad de transacciones.

Tengo una posibilidad alternativa. Digamos que lo que realmente se envía a los nodos es una transacción con un campo de firmas vacío (creo que ese campo no existe debido a las secuencias de comandos y las cosas multi-sig, pero tengan paciencia conmigo). Luego, las firmas se pueden enviar a través de un canal separado. Lo que realmente se estampa en la cadena de bloques es una transacción con un campo de firmas vacío. Y luego, debido a la regla de la cadena de bloques más larga, siempre gana, los nodos que no son Segwit simplemente aceptarán que la cadena de bloques con la mayor cantidad de transacciones, que incluye algunas transacciones divertidas sin firma, es la cadena de bloques autorizada.

Pero aparentemente la realidad es más complicada.

Además, hay una pregunta sobre cuánto se puede abusar de la regla de cadena de bloques más larga que siempre gana. (La palabra "abusado" no implica una opinión negativa). Por ejemplo, digamos que se me ocurre FoobarWit. FoobarWit es lo mismo que Bitcoin pero con un tamaño de bloque más grande (sin Segwit). Una vez que suficientes nodos adopten FoobarWit, más nodos de este tipo ganarán la carrera minera y, por lo tanto, otros nodos aceptarán efectivamente bloques más grandes porque la historia es más larga. Sé que ese no es el caso, pero ¿por qué?

@Murch Leí eso. realmente no ayudó

Respuestas (2)

La respuesta a la pregunta "¿Son los testigos segwit parte de la cadena de bloques?" depende de lo que definas como la cadena de bloques:

  • Según los antiguos nodos pre-segwit, la respuesta es no , ya que no les importa ni reciben a los testigos.

  • Según los nuevos nodos segwit, la respuesta es ; los testigos son una parte tan importante de la cadena como todo lo demás y están sujetos a tantas reglas de validación.

Entonces, segwit aumenta ligeramente el rendimiento, a costa de aumentar el tamaño de la cadena de bloques. Aquí no hay una varita mágica, y este aspecto de segwit es simplemente un aumento del tamaño del bloque. No es una mejora de la escalabilidad.

Segwit fue principalmente una solución para el problema de la maleabilidad de las transacciones, abriendo la puerta a varios protocolos de alto nivel que se vieron perjudicados por no poder razonar sobre futuras transacciones en cadena que aún no se habían publicado. Además, también mejoró un poco la estructura de incentivos (haciendo que el gasto sea relativamente más barato que la creación de productos). Como efecto secundario final de eso, también aumentó un poco el tamaño del bloque de una manera compatible con versiones anteriores.

En cuanto a su pregunta sobre otra bifurcación que va más allá: lo que hace su software no tiene efecto en aquellos que no lo adoptan. Incluso si tiene todo el hashrate del mundo a bordo, a los nodos antiguos no les importará ni verán sus datos adicionales.

Pero, ¿qué hace que este cambio no desencadene una bifurcación dura? ¿Y cómo puede algo estar y no estar en la cadena de bloques? Pensé que solo había una cadena.
No puedo tomar lo que dices por fe
La única explicación real sería la historia de una transacción de segwit entre Alice y Bob a través de la red. Todo lo demás es "¡Mágicamente puede hacer esto!" Aunque la explicación de James C. está empezando a ayudar
Estoy leyendo el BIP. Si tengo un gran avance, publicaré una respuesta.
Los nodos Segwit simplemente eliminan los testigos cuando se transmiten a pares que no son Segwit. Como los testigos no afectan al txid, no hay nada en una transacción que aluda o se refiera a su testigo de ninguna manera, por lo que nada se rompe para los nodos que no se preocupan por esos testigos. Sin embargo, el bloque contiene un hash de todos los testigos (de una manera que parece un dato aleatorio para los nodos antiguos), lo que lo convierte en parte de la cadena para quienes se preocupan por él.
Es útil darse cuenta de que la cadena de bloques no es solo una gota de bytes. Es una estructura con piezas de datos que se refiere a otras piezas de datos con hashes. Si un nodo requiere los datos a los que apuntan esos hashes es su propia decisión (por ejemplo, los nodos ligeros tienen los encabezados pero no requieren las transacciones). Segwit simplemente agregó una nueva pieza de datos, que importa a los nuevos nodos y a otros no.
Así que es casi como decir que creamos un dialecto de C compatible con versiones anteriores donde algunos comentarios (que los compiladores más antiguos ignorarían) se vuelven ejecutables. Entiendo eso. Pero luego estás diciendo que el bloque contiene solo el hash de los testigos
Según tengo entendido, el hashing es una operación irreversible. Entonces solo coloca una versión codificada de los datos del testigo en la cadena de bloques
Es incorrecto pensar en bloques para "contener" cualquier cosa. Todos son solo hachís. De la misma manera, también puede decir que las transacciones no son "parte" de la cadena de bloques, porque los encabezados de los bloques solo contienen un hash de las transacciones. Si piensa que las transacciones son una parte esencial de la cadena depende del contexto: los nodos completos lo hacen (no aceptarán un bloque con hashes tx sin las transacciones reales), los nodos ligeros no (ven los hashes y están contentos con ese). Lo mismo es cierto para los testigos segwit.
¿Cuál es el punto de un nodo de luz entonces? ¿Qué diablos puede hacer? Estoy perdido
Puede verificar que las transacciones fueron incluidas en la cadena, de forma selectiva, sin verificar que sus firmas sean válidas. Esto no es tan seguro como un nodo completo, pero suponiendo que muchos otros ejecuten el nodo completo, tiene una usabilidad mucho mejor con un nivel de seguridad que es aceptable para algunos casos de uso. Tenga en cuenta que no estoy diciendo que segwit esté relacionado con esta compensación de seguridad (no lo está), pero es un principio similar. Debe dejar de pensar que la cadena es solo una gota de datos que contiene algunas cosas y otras no. Es una estructura con compromisos, que a algunos les importa.

El límite de bloque de 1 MB sigue vigente después de la activación de segwit, pero solo se refiere a las transacciones de bloque serializadas en el formato anterior a segwit, que no incluye testigos. Este 1 MB sigue siendo consenso hoy.

Con segwit activado, hay una restricción de tamaño de bloque adicional, que SÍ se aplica a los datos de segwit: es un límite de "peso" de 4M por bloque.

El peso se calcula de la siguiente manera:

  • Bytes de transacción (serialización Pre-segwit) x 3
  • Más bytes de transacción con Segwit (serialización de Segwit) x 1

A medida que la porción testigo de los datos totales de la transacción aumenta hacia el 100 %, el límite de tamaño de bloque efectivo en bytes se acerca a los 4 MB.

Entonces, ¿los testigos no están estampados en la cadena de bloques?
¿La restricción del tamaño del bloque es evitar los DDOS a través del canal Segwit?
Buena pregunta: se asignan como raíz testigo (como merkleroot) junto con el testigo de coinbase en una salida coinbase op_return, que se valida para su corrección.
¿ El op_returncampo no cuenta para el tamaño de bloque clásico de 1 MB?
No hay un canal separado. Si un nodo no está preparado para segwit, los pares lo reconocen en el nivel P2P y se abstienen de enviar datos testigo al par anterior. Los datos de los testigos se "eliminan" de los datos de tx.
Sí, op_return no son datos testigo y, por lo tanto, contribuyen al límite de bloque de 1 MB.
"confirmado como testigo raíz". ¿En la cadena de bloques? Gracias.
Sí, en la transacción de coinbase, que es el primer tx en cada bloque :) puede encontrar detalles en uno de los BIP de segwit. Algo así como dsha256(witnessroot|coinbasewitness).