témoin séparé : Transaction Segwit à Golang
- à partir de wif, j'ai dérivé la clé de pub compressée : « 035476e55521c97cf0489e6c57893a99d67e84d306a69e6b6904f324c11b3cef8d ».
- programme témoin créé : « 813798fcae182d1a36c6b4bb5f69e03bb9ec4124 ».
- script créé : « 0014813798fcae182d1a36c6b4bb5f69e03bb9ec4124 » et sigscript du script qui doit être spécifié pour dépenser cette sortie : « 160014813798fcae182d1a36c6b4bb5f69e03bb9ec4124 ».
- entrée tx ajoutée : {hash : « 863fea23ba1c176bda5e360b0be25cacc405877aa3e46a3e1c60196c3b6cd7b6 », vout : 0, signatureScript : scriptSig, témoin : nul}
- créé pkscript pour l'adresse « 14s9ocrbTX3ZCybtcN1jmtdxxJwKuyM3Em » (p2sh-p2wpkh) : « a914809800f62119afdcf2317882eda5efd7a9a2163487 ».
- ajout de txout {montant : 11 000, scriptPubKey : pkscript}
- txSigHashes calculé := txscript.NewTxSigHashes(tx)
- décodé l'indice utxo en octets : « a914bb4d332112bde9787ac2da5954ee5a2c5fbada6987 ».
- signature de témoin dérivée : wit := txscript.WitnessSignature(tx, txSigHashes, 0, montant, indice, txscript.SigHashAll, wif.
PrivKey, true) résultat : « 3045022100bae83fd9e87751350a09bc4c120b29decadb13fb389541c3025a8982906 035476e55521c97cf0489e6c57893a99d67e84d306a69e6b6904f3 24c11b3cef8d ».
- ajout de la signature du témoin à tx.TxIn[0].
Témoin
- Tx signé sérialisé : « 01000000000101b6d76c3b6c19601c3e6ae4a37a8705c4ac5ce20b0b365eda6b171cba23ea3f860000000017160014813798fcae182d1a36c6b4bb5f69e 03bb9ec4124ffffffff01f82a000000000000434104b2534d287f2d9fa908319557298591143fecbd3f6497d6d11f283b80c3248c35f580ff376805418c3610256bc102c 0beb3e9f745d493aed81127f5d4a4921bebac02483045022100bae83fd9e87751350a09bc4c120b29decadb13fb389541c3025a8982906602d5022005dc688901fd27b7 »
Même si j'ai suivi toutes les règles pour créer cette transaction, toute tentative de la pousser dans le réseau principal (via Blockcypher et d'autres services) a échoué à cause de cette erreur : « Erreur de validation de la transaction : erreur d'exécution du script pour l'entrée 0 faisant référence à 863fea23ba1c176bda5e360b0be25cacc405877aa3e46a3e1c60196c3b6cd7b6 à 0 : le script n'était PAS vérifié avec succès »
Ma question est donc la suivante : où ai-je mal fait ? Quelle étape est mauvaise et comment la faire correctement ?