Dieser Artikel machte mich darauf aufmerksam, dass SIGHASH-Flags 4 Byte lang sind, wenn sie signiert sind, aber nur das letzte Byte tatsächlich in der Transaktion enthalten ist. Dann fügt OP_CHECKSIG 3 Bytes 0x000000
wieder hinzu, bevor die Signatur überprüft wird. Der Artikel beschreibt einen cleveren Weg, einen Fork mit diesen drei abgeschnittenen Bytes einzuführen – warum also sind die SIGHASH-Flags überhaupt 4 Bytes lang? Ist das ein Konstruktionsfehler oder Feature?
Ich nehme an, es ist einfach das Ergebnis von Faulheit.
Im ursprünglichen Client-Quellcode (und noch heute) wird der Sighash-Typ als int dargestellt. Das Serialisierungsframework serialisiert ints standardmäßig als 4 Little-Endian-Bytes.
Ich nehme an, der Schöpfer von Bitcoin hat sich nicht die Mühe gemacht, es vor der Serialisierung in ein einzelnes Byte zu konvertieren.
Wenn es einen anderen Grund gibt, fürchte ich, müssen Sie ihn fragen.
Stecknadelkopf
Stecknadelkopf
nHashType
alsunsigned char
(1 Byte) gecastet wird: github.com/bitcoin/bitcoin/blob/…Pieter Wuille