Témoin séparé - La création d'une transaction Segwit brute à partir de zéro et l'obtention de la signature doivent être nulles en cas d'échec de l'opération CHECK(MULTI)SIG

J'essaie de créer une transaction Segwit sur TESTNET à partir de zéro en faisant référence à un guide en ligne : https://medium.com/coinmonks/creating-and-signing-a-segwit-transaction-from-scratch-ec98577b526a

Mon code mnémonique BIP-39 :

différer toast alerte bonbons orbite raton laveur wagon heure tonnerre kiwi maison cigare

Ma clé publique principale TESTNET BIP-32 dérivée de l'adresse Segwit Bech32 avec le chemin de dérivation 'm' :

tb1qzjgctgz9t98dmkwp4z26whg6tl4w9s6rl6hwwj

Le profil d'adresse peut être consulté à partir d'ici.

Juste pour simplifier le débogage, la dérivation « m » sera utilisée uniquement.

Pour plus de contexte, le format compressé de la clé publique principale :

03D7DE86033E1C815BA0E3589938B7AC906B728F1F2C771542E203E32B80A3385A

Pour plus de contexte, le format non compressé de la clé publique principale :

04D7DE86033E1C815BA0E3589938B7AC906B728F1F2C771542E203E32B80A3385AE1DEED79187355D35FDABAF74DFD186A8B8C9FE1D6357AA46750A47B86ED16CF

La graine BIP-32 brute :

1CD4561EF82D35F9EE2E95ED63B68BB91ADA8967E1D98FA4080637A4CC310BE99DD285F82F45EE004ADC408F8B93C2A829A5B811104496A6FB0301E062CBC813

La clé privée principale brute utilisée ultérieurement pour la signature numérique :

13D84CAC526896CEF2594D71621D2AEDC90F9DAEA88A1751AD99E35868E0021B

Je souhaite m'envoyer (tb1qzjgctgz9t98dmkwp4z26whg6tl4w9s6rl6hwwj) des fonds (0x5503000000000000 / 853 satoshis) en utilisant ma propre adresse (tb1qzjgctgz9t98dmkwp4z26whg6tl4w9s6rl6hwwj).

Je commence donc à créer les entrées Segwit qui seraient ensuite hachées doublement SHA256 puis signées.

Il suit les étapes définies par le BIP143 :

Double SHA256 de la sérialisation de : 1. nVersion de la transaction (little endian 4 octets) 2. hashPrevouts (hachage de 32 octets) 3. hashSequence (hachage de 32 octets) 4. outpoint (hachage de 32 octets + 4 octets) little endian) 5. scriptCode de l'entrée (sérialisé sous forme de scripts dans CTxOuts) 6. valeur de la sortie dépensée par cette entrée (little endian de 8 octets) 7. nSéquence de l'entrée (little endian de 4 octets) 8. hashOutputs ( hachage de 32 octets) 9. nLocktime de la transaction (little endian 4 octets) 10. type sighash de la signature (little endian 4 octets) // 1. nVersion de la transaction (little endian 4 octets) > printf "4E2F5CCED0DC6D7B229AB43381A7DDBAB759C457C3366D8435782120493133A0 00000000" | xxd -p -r | sha256sum-b | xxd -p -r | sha256sum -b > printf "ffffffff" | xxd -p -r | sha256somme | xxd -p -r | sha256sum