taproot : dépenser la sortie du chemin de script P2TR à l'aide de la bibliothèque python bitcoinutils

  • Code python pour dépenser une sortie de chemin de script P2TR avec bitcoinutils
  • Difficultés rencontrées lors de l'essai de cette fonctionnalité
  • Erreur liée à la partie "bloc de contrôle" et demande d'aide pour résoudre le problème.

J'essaie actuellement de réaliser une sortie P2TR en utilisant l'un des scripts utilisés pour créer l'adresse. Vous trouverez ci-dessous le code python que j'ai essayé de construire une transaction brute afin de dépenser l'UTXO. L'adresse à partir de laquelle j'essaie de déplacer les pièces testnet est.

« vout » : 0}]

get_public_key() pub3 = priv3get_public_key() def main() : setup(« testnet ») input_amounts = [79800]

taproot : dépenser la sortie du chemin de script P2TR à l'aide de la bibliothèque python bitcoinutils

to_x_only_hex()to_x_only_hex()to_x_only_hex() tr_script_p2pk3]tr_script_p2pk4]input_address = pub1to_script_pub_key()) tx1 = Transaction(inputs=[input_1]sorties=[output_1]has_segwit=True) sig1 = priv3 txin_index=0to_script_pub_key()]montants=input_amounts tapleaf_script=tr_script_p2pk3arborescence branch_23 = tapbranch_tagged_hash(leaf2 leaf4) assert(merkleroot1 script_to_spend=tr_script_p2pk3witnessesto_hex()to_hex()])) print(« \nTransaction brute signée  :\n » + tx1.serialize())

La transaction brute que j'ai obtenue en exécutant ce code est la suivante.

longueur du bloc de contrôle c0 => version feuille par défaut tapscript => clé interne (dans cet exemple, pub1) => Chemin Merkle (dans ce cas, leaf2 + leaf4 ) 00000000 => nTemps de verrouillage

La transaction a échoué et j'ai reçu le message suivant  : J'ai essayé la même chose code mais avec une adresse avec deux chemins de script de racine pivotante et la transaction a été diffusée avec succès. Dans ce cas, le chemin Merkle doit simplement être le hachage étiqueté tapleaf de l'autre script qui n'a pas été utilisé pour déverrouiller l'UTXO. Je pense que l'erreur a quelque chose à voir avec la partie bloc de contrôle, mais je ne sais pas exactement où mon code s'est mal passé. Quelqu'un peut-il signaler le problème ?