[taproot][script] 4-leaf Taproot Merkle Tree in Python: testnet implementation + control block analysis

100 views
Skip to first unread message

aaron.recompile

unread,
Jul 9, 2025, 6:42:47 PMJul 9
to Bitcoin Development Mailing List
Hi all,

I'm Aaron Zhang, an independent developer focused on Bitcoin script engineering and Taproot experimentation.

I’d like to share a hands-on project involving a fully constructed 4-leaf Taproot Merkle tree in Python, with testnet-validated spending transactions and in-depth analysis of control block internals.

This work features:

- Construction of a Taproot address with 4 distinct script leaves:
    1. `OP_SHA256` + `OP_EQUAL` hashlock
    2. 2-of-2 `OP_CHECKMULTISIG`
    3. `OP_CSV` + `OP_CHECKSIG`
    4. `OP_CHECKSIG`

- A total of five spending paths, including four script path spends and one key path spend, all confirmed through on-chain transactions on Bitcoin testnet.

- Merkle tree construction and Taproot output key tweaking (internal key + script tree root), followed by a **byte-by-byte breakdown of the control blocks**, including:
    - Control byte (leaf version + parity)
    - Internal public key
    - Ordered Merkle sibling hashes

- Code-level analysis and experimental validation of how these control blocks are constructed and verified against the Taproot output, based on actual testnet spends.

- Witness stack inspection and visualization of script execution, showing the actual runtime behavior for each script path.

Resources:

- Part 1: 4-leaf tree construction and testnet validation  
  https://medium.com/@aaron.recompile/building-a-4-leaf-taproot-tree-in-python-the-first-complete-implementation-on-bitcoin-testnet-c8b66c331f29

- Part 2: Control block structure and stack visualization  
  https://medium.com/@aaron.recompile/taproot-control-block-deep-analysis-stack-execution-visualization-5ff10f98032c

- GitHub repo with code, testnet transactions, and diagrams  
  https://github.com/btcstudy/btcstudy.github.io/tree/main/Not-Just-Hodling:bitcoin-script-Engineering/demo3_taproot_4leaf

This project aims to provide a fully verifiable and pedagogical example of non-trivial Taproot path spends, helping developers better understand script trees, control blocks, and Tapscript execution through practical experimentation.

I’d be happy to receive any feedback or discussion around:
- Control block design and merkle path optimization
- Spend path visibility and privacy tradeoffs
- Tooling for visualizing script-path execution and verification

Thanks and best regards,  
Aaron Zhang  
[@aaron.recompile](https://medium.com/@aaron.recompile)  
GitHub: https://github.com/btcstudy
Reply all
Reply to author
Forward
0 new messages