Impossible de dépenser un chemin de script en utilisant buidl python lib
J'ai eu du mal à comprendre comment utiliser un chemin de script particulier en utilisant buidl python lib. Actuellement, je suppose que le problème réside dans la façon dont je construis l'adresse p2tr ou qu'il y a un bug (très improbable) dans la façon dont le bloc de contrôle est calculé.
L'erreur que je reçois lors de la diffusion d'une transaction de dépense est : Incompatibilité de hachage du programme témoin
Vous pouvez trouver mon code dans l'essentiel ou ci-dessous :
depuis buidl.hd importer HDPrivateKey depuis buidl.ecc importer PrivateKey depuis buidl.taproot importer TapLeaf, TapBranch, TapScript depuis buidl.script importer Script depuis buidl.op importer * depuis buidl.tx importer Tx, TxIn, TxOut depuis buidl.taproot importer ControlBlock depuis buidl.witness import Témoin depuis buidl.script import P2WPKHScriptPubKey, ScriptPubKey, decode_bech32 pvt_key = PrivateKey(12345, network="regtest") internal_pvtkey = PrivateKey(3333, network="regtest") internal_pubkey = internal_pvtkey.point # leaf_a = Script([op_1, op_add, op_2, op_equal]) # feuille_b = Script([op_2, op_add, op_4, op_equal]) # feuille_b = Script([op_1, op_add, op_5, op_equal]) script_a = TapScript([81, 147, 82, 135]) script_b = TapScript([82, 147, 84, 135]) script_c = TapScript([81, 147, 85, 135]) leaf_a = TapLeaf(script_a) leaf_b = TapLeaf(script_b) leaf_c = TapLeaf(script_c) branch_ab = TapBranch(leaf_a, leaf_b) branch_abc = TapBranch(branch_ab, leaf_c) adresse = branch_abc.external_pubkey(internal_pubkey).p2tr_address(network="regtest ") print("Dépôt des fonds à :", adresse) # SPEND PATH B montant = 1_000_000 cb = branch_abc.control_block(internal_pubkey, leaf_b) tx_in(bytes.fromhex("07fdfaf3541c26d5fc18f644f338d8ac4e47f7bcc83c41192741990d 150b8d19"), 1) tx_in.witness.items = [encode_num(2), leaf_b.tap_script.raw_serialize(), cb.serialize()]
tx_ins =
tx_outs = [TxOut(998000, P2TRScriptPubKey(decode_bech32("bcrt1py7e8e0q7pdkxwyp2tjn65k4kd5kgch0aqe03jzjczn96xat6nwjswsu892")))]tx = Tx(2, tx_ins, tx_outs, network="regtest", segwit=True) tx.serialize().hex() # 02000000000101941ea2c9c9236e92e0d94530d0de3694012f0d3902399dc680294ef2e82a0e 780100000000ffffffff01301b0f0000000000160014904946363de1f2cb5ce439e5ed038492051b2785030101045293538841c04cecb33a915e2c3b189eb6ee45fa4eb 3eddeff09729945c600f893bd4381b294c95c39c9307263577e8ed45b4d6ad91cf6f47f42476e0e40676b1f028be1360600000000 # J'obtiens toujours : `non-mandatory-script-verify-flag ( Incompatibilité de hachage du programme témoin)
Veuillez noter que j'ai réussi à créer et à dépenser une adresse p2tr (en utilisant les mêmes tapscripts) avec la bibliothèque bitcointx, c'est pourquoi je suppose que je n'utilise probablement pas le construire bibliothèque correctement ou je comprends mal quelque chose.
