Crypto Flexs
  • DIRECTORY
  • CRYPTO
    • ETHEREUM
    • BITCOIN
    • ALTCOIN
  • BLOCKCHAIN
  • EXCHANGE
  • TRADING
  • HACKING
  • SLOT
  • CASINO
  • SUBMIT
Crypto Flexs
  • DIRECTORY
  • CRYPTO
    • ETHEREUM
    • BITCOIN
    • ALTCOIN
  • BLOCKCHAIN
  • EXCHANGE
  • TRADING
  • HACKING
  • SLOT
  • CASINO
  • SUBMIT
Crypto Flexs
Home»BITCOIN NEWS»taproot – Enable P2TR script path output using python bitcoinutils library
BITCOIN NEWS

taproot – Enable P2TR script path output using python bitcoinutils library

By Crypto FlexsMarch 21, 20243 Mins Read
Facebook Twitter Pinterest LinkedIn Tumblr Email
taproot – Enable P2TR script path output using python bitcoinutils library
Share
Facebook Twitter LinkedIn Pinterest Email

I’m trying to use the P2TR output using one of the scripts used to generate the current address. Below is some Python code that attempts to construct a raw transaction to use UTXOs. The address you want to move the testnet coins to is tb1pnnr3jysdew9gma9ac9k3pzdy5xp69fka3jh9vkga5ak28yjak0ws3hw834.

from bitcoinlib import transactions
from bitcoinutils.setup import setup
from bitcoinutils.script import Script
from bitcoinutils.utils import *
from bitcoinutils.transactions import Transaction, TxInput, TxOutput, TxWitnessInput
from bitcoinutils.keys import *

utxos = ('txid': "4390635a95c7e3538dda7c4690f38fbfaa5d93eaf04e1f4f63fb811a884428e2", "vout": 0)

priv1 = PrivateKey(wif="secret for obvious reason 1")
priv2 = PrivateKey(wif="secret for obvious reason 2")
priv3 = PrivateKey(wif="secret for obvious reason 3")
priv4 = PrivateKey(wif="secret for obvious reason 4")

pub1 = priv1.get_public_key()
pub2 = priv2.get_public_key()
pub3 = priv3.get_public_key()
pub4 = priv4.get_public_key()

def main():
    setup("testnet")

    input_amounts = (79800)
    output_amounts = (79650)

    # taproot script 2 is a simple P2PK with key 2
    tr_script_p2pk2 = Script((pub2.to_x_only_hex(), "OP_CHECKSIG"))

    # taproot script 3 is a simple P2PK with key 3
    tr_script_p2pk3 = Script((pub3.to_x_only_hex(), "OP_CHECKSIG"))

    # taproot script 4 is a simple P2PK with key 4
    tr_script_p2pk4 = Script((pub4.to_x_only_hex(), "OP_CHECKSIG"))

    all_leafs = ((tr_script_p2pk2, tr_script_p2pk3), tr_script_p2pk4)
    input_address = pub1.get_taproot_address(all_leafs)

    input_1 = TxInput(txid=utxos(4)('txid'), txout_index=utxos(4)('vout'))

    output_address = P2pkhAddress(address="moHfMJHAP3LE2aYTp4Q6g5GxnnfTK9muAJ")
    output_1 = TxOutput(amount=output_amounts(0), script_pubkey=output_address.to_script_pub_key())

    tx1 = Transaction(inputs=(input_1), outputs=(output_1), has_segwit=True)
    sig1 = priv3.sign_taproot_input(tx=tx1, txin_index=0, utxo_scripts=(input_address.to_script_pub_key()),
                                    amounts=input_amounts, script_path=True, 
                                    tapleaf_script=tr_script_p2pk3, tweak=False)

    # tagged hashes of leafs
    leaf2 = tapleaf_tagged_hash(tr_script_p2pk2)
    leaf3 = tapleaf_tagged_hash(tr_script_p2pk3)
    leaf4 = tapleaf_tagged_hash(tr_script_p2pk4)

    # If using get_tag_hashed_merkle_root
    merkleroot1 = get_tag_hashed_merkle_root(scripts=all_leafs)

    # If manually constructing the tree
    branch_23 = tapbranch_tagged_hash(leaf2, leaf3)
    merkleroot2 = tapbranch_tagged_hash(branch_23, leaf4)
    assert(merkleroot1.hex() == merkleroot2.hex())

    control_block = ControlBlock(pubkey=pub1, script_to_spend=tr_script_p2pk3, scripts=leaf2+leaf4)
    tx1.witnesses.append(TxWitnessInput((sig1, tr_script_p2pk3.to_hex(), control_block.to_hex())))
    print("\nRaw signed transaction:\n" + tx1.serialize())

Among the three scripts used to generate addresses, we are trying to use UTXO using tr_script_p2pk3. The raw transaction obtained by running this code is:

02000000 => version
0001 => marker and flag
01 => input count
e22844881a81fb634f1f4ef0ea935daabf8ff390467cda8d53e3c7955a639043 => input txid
00000000 => input vout
00 => scriptSig
ffffffff => nSequence
01 => output count
2237010000000000 => output amount
1976a914553d745f650e2faba231590931c3561e3ab7cb7888ac => scriptPubKey
03 => witness stack count
4060f3d6d5e5782977b53d6f7025ff8c7f70e1cb6a1b1de96117aa499713fcd701fed99f27d0922e58a8a8d731af9f3f9b36d5389e694b23513dd0b0eea6264fa7 => schnorr signature
222030a1dfffabb677eb2d8aa45bc7e24cbc31d67731680fe5be4b524e3359445f37ac => tr_script_p2pk3
61 => control block length
c0 => default leaf version tapscript
cded16e0e749cb161694b20f5bd7737ebc22b40805a415941b3fcc26df30dbb1 => internal key (in this example, pub1)
dff122122208c96d11efdd99a987150f7c422eeb2f9076f40804382dbc95c7b78cbca50495d9c133a60cf93e502e84b421b5640258f549c2bdb6e538eae16e7d => Merkle path (in this case, leaf2 + leaf4)
00000000 => nLocktime

The transaction failed and I received the following message: I also tried the same code, but I have an address with two tabroot script paths and the transaction was successfully broadcasted. In this case, the Merkle path must be a hash of the tapleaf tag from another script that was not used to unlock the UTXO. I think the error is related to the control block part, but I can’t figure out exactly where my code is going wrong. Can someone point out the problem?

Share. Facebook Twitter Pinterest LinkedIn Tumblr Email

Related Posts

France can break the EU password market with ‘atomic weapons’.

September 15, 2025

Expect what XRP ETF is approved by the SEC

September 9, 2025

Cardano founder says Chainlink quotes ‘ridiculous price’ to them.

September 3, 2025
Add A Comment

Comments are closed.

Recent Posts

The fullback of $ 16 of the chain link (link) can set a parabolic price rally.

September 18, 2025

Animation Powerhouse Maggie Kang To Join Programming Lineup

September 18, 2025

MEXC Joins Forces With Lombard Finance (BARD) To Launch $1 Million Prize Pool Extravaganza

September 18, 2025

What is the next after the Fed’s 25bps is cut? Everything you need to know

September 18, 2025

The XRP market value surpasses Shopify, Verizon, and Citigroup. Whales sell 40m coins.

September 18, 2025

Green Hood Contracts Thanksgiving Summary -Ackee Blockchain

September 17, 2025

BetFury Is At SBC Summit Lisbon 2025: Affiliate Growth In Focus

September 17, 2025

FED Mining’s Cloud Mining Platform Is Helping Users Earn $8,800 Per Day, And XRP’s Growth Is Driving Market Enthusiasm.

September 17, 2025

Stablecoin Holdings Drop As Investors Pivot To SOL, XRP, And Altcoins

September 17, 2025

Flipster Partners With WLFI To Advance Global Stablecoin Adoption Through USD1 Integration

September 17, 2025

Zircuit Launches $495K Grants Program To Accelerate Web3 Super Apps

September 16, 2025

Crypto Flexs is a Professional Cryptocurrency News Platform. Here we will provide you only interesting content, which you will like very much. We’re dedicated to providing you the best of Cryptocurrency. We hope you enjoy our Cryptocurrency News as much as we enjoy offering them to you.

Contact Us : Partner(@)Cryptoflexs.com

Top Insights

The fullback of $ 16 of the chain link (link) can set a parabolic price rally.

September 18, 2025

Animation Powerhouse Maggie Kang To Join Programming Lineup

September 18, 2025

MEXC Joins Forces With Lombard Finance (BARD) To Launch $1 Million Prize Pool Extravaganza

September 18, 2025
Most Popular

Bitcoin miners overwhelmed after electricity theft, exchange ‘shutdown’ scam: Asia Express

August 23, 2024

Moonbeam Network Joins Animo Industries for Web3 Games

February 16, 2024

Binance to Support Horizen (ZEN) Network Upgrade on September 12, 2024

September 2, 2024
  • Home
  • About Us
  • Contact Us
  • Disclaimer
  • Privacy Policy
  • Terms and Conditions
© 2025 Crypto Flexs

Type above and press Enter to search. Press Esc to cancel.