¿Cómo evita la maleabilidad el almacenamiento del testigo fuera del bloque?

Tengo algunas preguntas sobre cómo funcionan los testigos segregados.

estoy leyendo este post y en la respuesta existe esta frase

Dado que los datos de firma (datos de testigos) se almacenan fuera de la transacción (y fuera del bloque estándar), significa que esos datos no tienen que contarse para el tamaño del bloque.

Ahora tengo tres preguntas sobre este argumento.

  1. Los datos del scriptSig se mueven de TransactionInput a RawTransaction, por lo que RawTransaction no tiene maleabilidad. Tal vez no puedo imaginar qué sucedió realmente con las transacciones sin testigos durante la maleabilidad, ¿puede darme un ejemplo?
  2. ¿Por qué los datos testigo se almacenan fuera del bloque? ¿Qué quieres decir? Creo que no entiendo el sentido de este ahorro de espacio porque los datos testigo están presentes dentro del archivo blk
  3. ¿Cómo (si lo entiendo correctamente) utiliza Bitcoin Core el árbol Merkle para verificar la firma? (esta pregunta está relacionada con la primera, creo que no entendí el fenómeno de la maleabilidad como sucede)

Respuestas (2)

Los datos del scriptSig se mueven de TransactionInput a RawTransaction, por lo que la transacción Raw no es maleable. tal vez no puedo imaginar qué sucedió realmente con las transacciones sin testigos durante la maleabilidad, ¿puede darme un ejemplo?

El ID de la transacción es un hash de toda la estructura de datos de la transacción (la versión, las entradas, las salidas, las firmas, la cantidad de entradas y salidas, el tiempo de bloqueo, todo). Las firmas de curva elíptica, como las que utiliza Bitcoin, contienen un número aleatorio como parte de la firma. El uso de otro número aleatorio también conducirá a una firma válida pero diferente. Si la firma cambia, el hash de todo el objeto de la transacción también cambiará.

En las transacciones testigo segregadas, estos datos de firma no forman parte de la estructura de datos de la transacción base; esto significa que cambiar la firma ya no cambiará el txid, ya que el resto de la transacción no se ha alterado.

¿Por qué los datos testigo se almacenan fuera del bloque? ¿qué quieres decir? Creo que no entiendo el sentido de este ahorro de espacio porque los datos testigo están presentes dentro del archivo blk

Mover los datos testigo fuera del bloque permite que Bitcoin empaquete de manera efectiva más transacciones en un bloque: el espacio que antes usaban todas las firmas ahora está disponible para agregar más transacciones.

¿Cómo (si lo entiendo correctamente) el núcleo de bitcoin usa Merkle-tree para verificar la firma? (esta pregunta está relacionada con la primera, creo que no entendí el fenómeno de la maleabilidad como sucede)

Merkle árboles que no tienen nada que ver con la verificación de firmas. Los árboles Merkle se utilizan para generar un compromiso en el que las transacciones se incluyen en un bloque, que luego se coloca en el encabezado del bloque y se bloquea mediante el sistema de prueba de trabajo. La maleabilidad de la transacción afectó esto, ya que alterar una ID de transacción dentro de las transacciones seleccionadas para el bloque alteraría el árbol merkle; esto ya no es posible por las razones mencionadas anteriormente.

Muchas gracias por su respuesta, pero no entiendo porque se define que los datos del testigo son externos al bloque. ¿Qué significa fuera del bloque? ¿Por qué entonces si los datos se deserializan dentro del bloque?
Los datos de testigos segregados siguen siendo parte del bloque, e incluso están comprometidos con él. Está solo en un área que (a) no contribuye a txids (para corregir la maleabilidad) y (b) no es visto por los nodos antiguos, por lo que pasa por alto los límites de tamaño existentes.
Ah, ok gracias, sobre el problema de los límites de tamaño existentes existe un BIP? en caso afirmativo ¿cuál es tu nombre?
Otra pregunta @PieterWuille sobre la maleabilidad de la identificación de la transacción, si creo una nueva transacción no testigo y la envío a la red bitcoin, ¿cómo cambia esta identificación de la transacción? Cuál es la forma en que se calculó txid permite que cualquiera pueda hacer pequeños cambios en la transacción
BIP62 enumera una serie de formas conocidas de procesar transacciones.

¿Por qué los datos testigo se almacenan fuera del bloque? ¿qué quieres decir? Creo que no entiendo el sentido de este ahorro de espacio porque los datos testigo están presentes dentro del archivo blk.

Las firmas están en el bloque. Todas las firmas de un bloque forman otro árbol merkle y se mantienen en una salida de coinbase tx. Creo que esto se refiere al "conjunto UTXO" que es como un libro mayor donde los mineros registran y verifican los UTXO. Los Segwit TX no conservan las firmas en el TXID, por lo que el testigo se almacena en el bloque, pero no en el "conjunto UTXO".

Esto es correcto, pero confuso. Las entradas de transacciones tampoco llegan nunca al conjunto UTXO, pero no están segregadas.