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.
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.
¿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".
vincenzopalazzo
pieter wuille
vincenzopalazzo
vincenzopalazzo
pieter wuille