Bitcoin Core : Vérification manuelle d'un P2WSH

[pxn_tldr]

Pour tester ma compréhension du processus de signature et de vérification, j'ai essayé de vérifier manuellement certaines transactions Bitcoin aléatoires. Malheureusement, je suis resté coincé avec une transaction P2WSH, je choisis la transaction suivante avec Hash

Avec la transaction brute  :

Je peux désérialiser ceci en  :

Bitcoin Core : Vérification manuelle d'un P2WSH

Numéro de version TX = 00000001

Nombre d'entrées = 01

TX à partir du hachage =

Index du point de sortie TX = 00000001

Script d'entrée =

Numéro de séquence = ffffffff

Nombre de sorties = 02

Valeur (base 10) = 660000

Script de sortie =

Valeur (base 10) = 1174148

Script de sortie =

Témoin 0 0 = 00

Témoin 0 1 =

Témoin 0 2 =

Témoin 0 3 =

Temps de verrouillage = 00000000

Maintenant, j'essaie de calculer le MessageHash qui est signé  :

avec :

hashPrevouts = sha256²()

hashSequence = sha256²(ffffffff)

hashOutputs = sha256² ( )

Version  : 01000000

hashPrevouts  :

Séquence de hachage  :

point de sortie  :

Code de script  :

valeur  : 345c1d0000000000

nSéquence  : ffffffff

Sorties de hachage  :

nTemps de verrouillage  : 00000000

soupir  : 01000000

Cela me donnera le MessageHash =

Mais si j'essaie de vérifier ce MessageHash avec la première signature ( ), qui a R = et S = contre l'une des 3 PubKeys du témoin 0 3, j'obtiens toujours le message « La signature n'est pas valide ».

Quelqu'un peut-il me dire où je me suis trompé ?