Was sind die Unterschiede zwischen der Transaktions- und der Blockversion? (v1, v2, v3 usw.)

Wenn ich den Befehl zum Abrufen eines Blocks ausführe, sehe ich, dass Version 2 zurückgegeben wird:

getblock 0000000000000000ae22455f90306f43e8c806585fe2dfc3b0e92ac7b7620bff

Ausgang

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

und wenn ich den Befehl zum Abrufen einer Transaktion ausführe, sehe ich, dass Version 1 zurückgegeben wird

 getrawtransaction 260ef6a9bbb401ecbfdace19c84ae3245f0ab5b229ea716209a38e9ec0fd14c1 1

Ausgang

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

Frage

Ich habe irgendwo gelesen, dass BIP32 dazu führen wird, dass beide version 3. Kann jemand erklären:

  • Wo finde ich eine kurze Liste der Regeln, was von jeder Version erwartet wird (es ist nicht im Wiki)

  • Wann sich diese Version geändert hat (Jahr und/oder Blocknummer)

  • Sind alte Versionen gesperrt oder werden sie noch unterstützt?

Antworten (2)

BIP0034 hat Blöcke der Version 2 hinzugefügt. Es erzwingt die Regel, dass die Transaktionsversion 1 ist (dies wurde zuvor nicht erzwungen und es gibt einige seltsame Transaktionsversionen in der Blockchain). Es erfordert auch, dass das Coinbase-Transaktionseingabeskript die Blockhöhe als erstes Datenelement enthält.

Es gab Diskussionen über einen neuen Version-3-Block und eine Version-3-Transaktion, die eine kanonische Codierung erzwingen würden. Dies wäre eine Lösung für das Problem der Transaktionsverformbarkeit. Das Überspringen der Transaktionsversion 2 würde die Versionen sowohl für Blöcke als auch für Transaktionen wieder gleich machen.

Sie können die Bitcoin-Verbesserungsvorschläge hier lesen .

Die Einhaltung von BIP-0066 erfordert, dass die nVersion eines Blocks auf 3 gesetzt wird, indem vorgeschlagen wird, „gültige Signaturen genau auf das zu beschränken, was von DER vorgeschrieben wird, um die Konsensregeln nicht von der Signaturanalyse von OpenSSL abhängig zu machen. Eine Änderung wie diese ist erforderlich, wenn Implementierungen dies wünschen um das gesamte OpenSSL aus dem Konsenscode zu entfernen."