Schwierigkeiten, eine p2pkh-Transaktion erfolgreich zu übertragen

Ich habe in der vergangenen Woche mit dem Senden von Bitcoin-Transaktionen mit Python experimentiert. Ich konnte erfolgreich p2wpkh->ALL Adresstypen, p2sh-p2wpkh->ALL Adresstypen senden.

Womit ich zu kämpfen habe, ist das Senden einer Legacy-p2pkh-Transaktion. Ich bekomme immer:

SIGNATURE MUST BE ZERO FOR FAILED CHECK(MULTI)SIG OPERATION

wenn ich versuche, die signierte Transaktion mit https://testnet.smartbit.com.au/txs/pushtx zu übertragen

Es scheint mir ein Signaturfehler zu sein. Aber ich kann nicht verstehen, warum ich in der Lage bin, gute Signaturen für andere Zahlungsarten zu generieren, aber dann schlechte Signaturen für p2pkh.

Mein RawTX:

01000000 01 4f8fe5092e16ad3da3327c36a6c5209c9aede34fc68615cfdf3049945e91ca61 00000000 00 ffffffff 02 4c4f000000000000 1976a9143f7ff5e4d9b36cbce77199043d5cf51b5fb4e8d188ac 546f4b0000000000 1976a9143f7ff5e4d9b36cbce77199043d5cf51b5fb4e8d188ac 00000000

Meine signierte TX:

01000000014f8fe5092e16ad3da3327c36a6c5209c9aede34fc68615cfdf3049945e91ca61000000006a47304402205881bb01ff20100233d6c1284eb6fe1857fb25a8cee52f5fe48ef8bbf61e42fe02201b00187031f299283b60b214d801c5ca0db8342a8e68c8020caf96e9a064b471012102a7b51771f972f4d2de85129886415af3e13efe943c12f149ab7c43c318f45ae9ffffffff024c4f0000000000001976a9143f7ff5e4d9b36cbce77199043d5cf51b5fb4e8d188ac546f4b00000000001976a9143f7ff5e4d9b36cbce77199043d5cf51b5fb4e8d188ac00000000

Signiertes TX, das mit meinem Python-Parser analysiert wurde:

Segwit: False
txn version: 1
Flag: 00

------------------------------------------------------------
Inputs: 1
------------------------------------------------------------

(1)
Previous txn hash: 61ca915e944930dfcf1586c64fe3ed9a9c20c5a6367c32a33dad162e09e58f4f
Index: 0
sigScript: 47304402205881bb01ff20100233d6c1284eb6fe1857fb25a8cee52f5fe48ef8bbf61e42fe02201b00187031f299283b60b214d801c5ca0db8342a8e68c8020caf96e9a064b471012102a7b51771f972f4d2de85129886415af3e13efe943c12f149ab7c43c318f45ae9
Sequence: ffffffff

------------------------------------------------------------
Outputs: 2
------------------------------------------------------------

(1)
Value (satoshis): 20300
pubKeyScript: 76a9143f7ff5e4d9b36cbce77199043d5cf51b5fb4e8d188ac

(2)
Value (satoshis): 4943700
pubKeyScript: 76a9143f7ff5e4d9b36cbce77199043d5cf51b5fb4e8d188ac

--------------------

Locktime: 0

Kann ich komprimierte öffentliche Schlüssel in normalen p2pkh-Transaktionen verwenden oder muss es normal unkomprimiert sein?

In meinem Skript erstelle ich das preImage auf die gleiche Weise wie meine anderen Segwit-Ein-/Ausgaben, aber offensichtlich verwende ich keine Flag-, Marker-Witness-Felder. Ich bin auch einem anderen Post hier gefolgt und habe versucht, nur eine einzige Eingabe zu signieren, und ich habe andere Fehler als den oben in diesem Post erhalten.

Wie unterscheidet sich der Segwit-Signaturprozess von Legacy?

Ich habe etwas Ähnliches in Python geschrieben, das Ihnen helfen könnte. Überprüfen Sie github.com/mcdallas/cryptotools/blob/master/btctools/… Zeilen 472 - 532 auf den Unterschied im Preimage zwischen Legacy und Segwit.
Ich habe es bereits herausgefunden, aber ich habe mir Ihre Bibliothek angesehen und sie sieht gut aus.

Antworten (1)

Egal.

Ich habe die beiden Antworten aus diesen Beiträgen kombiniert und es geschafft, etwas zum Laufen zu bringen:

Schritt-für-Schritt-Beispiel zum Einlösen einer Rohtransaktion erforderlich

https://bitcoin.stackexchange.com/a/41226/89247

Ja. Sie können komprimierte öffentliche Schlüssel mit p2pkh verwenden. Es gibt keine Einschränkungen.