¿Cuáles son las diferencias entre las versiones de transacción y bloque? (v1, v2, v3, etc.)

Si ejecuto el comando para buscar un bloque, veo que se devuelve la versión 2:

getblock 0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff

Producción

{
"hash" : "0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff",
"confirmations" : 5885,
"size" : 249065,
"height" : 280557,
"version" : 2,
"merkleroot" : "5b4c401a2ad5a82ef26efb1d7ad82a0b6abea18118b50a12b555ea9e8663042b",
"tx" : [    .... snip ...

y cuando ejecuto el comando para obtener una transacción, veo que se devuelve la versión 1

 getrawtransaction 260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1 1

producción

{
"hex" : "01000000027f4e827503d7d52617.. snip ..9763caaf4b6216343fa460b88ac00000000",
"txid" : "260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1",
"version" : 1,
"locktime" : 0,
"vin" : [

Pregunta

Leí en alguna parte que BIP32 hará que ambos sean version 3. ¿Alguien puede explicar:

  • Donde puedo encontrar una lista concisa de las reglas de lo que se espera de cada versión (no está en la wiki)

  • Cuándo cambió esa versión (año y/o número de bloque)

  • ¿Están prohibidas las versiones anteriores o todavía son compatibles?

Respuestas (2)

BIP0034 agregó bloques de la versión 2. Hace cumplir la regla de que la versión de la transacción es 1 (esto no se aplicaba anteriormente y hay algunas versiones de transacciones extrañas en la cadena de bloques). También requiere que el script de entrada de transacción de coinbase contenga la altura del bloque como el primer elemento de datos.

Se ha debatido sobre un nuevo bloque de la Versión 3 y una transacción de la Versión 3 que aplicaría la codificación canónica. Esta sería una solución al problema de la maleabilidad de las transacciones. Omitir la versión 2 de la transacción haría que las versiones fueran iguales una vez más para los bloques y las transacciones.

Puede leer las Propuestas de mejora de Bitcoin aquí .

El cumplimiento de BIP-0066 requiere que la nVersion de un bloque se establezca en 3 al proponer "restringir las firmas válidas exactamente a lo que exige DER, para que las reglas de consenso no dependan del análisis de firmas de OpenSSL. Se requiere un cambio como este si las implementaciones quieren para eliminar todo OpenSSL del código de consenso".