Pragmatic Bitcoin Taproot toolkit: Legacy/SegWit/Taproot, PSBT, optional Signet workflows, and Bitcoin Inquisition opcode templates (OP_CAT, CSFS, CTV).
Project description
btcaaron
A pragmatic Bitcoin toolkit for Taproot engineering — Legacy, SegWit, and Taproot flows, PSBT, and optional Signet / Bitcoin Inquisition opcode templates (OP_CAT, CSFS, CTV).
Designed for reproducible testnet and signet experiments, educational workflows, and script-path development.
If you find btcaaron useful, a GitHub star is appreciated.
👉 Looking for Bitcoin Inquisition experimental opcode templates (OP_CAT / CSFS / CTV)? See INQUISITION.md.
Current Status
v0.2.3 (alpha preview) — Core Taproot spend-path workflows are implemented and testnet/regtest-verified.
Current focus is release hardening: broader validation coverage, documentation alignment, and contributor testing feedback.
Features
Available Now (v0.1.x)
Production-tested on testnet with real transactions:
- Generate Legacy / SegWit / Taproot addresses from WIF
- UTXO scanning and balance lookup via public APIs
- Build and sign standard transactions
- Broadcast to Blockstream / Mempool endpoints
- Developer helpers (
WIFKey,quick_transfer)
Available Now (v0.2.3 - Alpha Preview)
Testnet-verified with real transactions (23 tests, all passing):
- Declarative Taproot tree builder (
.hashlock(),.multisig(),.timelock(),.checksig()) - Script-path and key-path spend constructors
- Automatic witness construction and signature ordering
- All 5 spend paths verified: hashlock, multisig, checksig, CSV timelock, keypath
- Real transaction TXID reproduction tests
Future (v0.3.x+)
- PSBT v2 hardening and broader interoperability validation
- Custom script templates
- Multi-input/output transactions
Positioning (Quick Comparison)
High-level developer-experience comparison only (not a full feature matrix).
| Library | Typical Use Case | Script-Path UX |
|---|---|---|
python-bitcoin-utils |
Low-level transaction/script construction and protocol experiments | Manual (build tree/witness/control-block flow yourself) |
btcaaron |
Fast Taproot prototyping, teaching workflows, and reproducible test scaffolds | Declarative (e.g., .hashlock(), .multisig(), .timelock()) |
BitcoinLib |
Wallet-oriented workflows, account management, and persistence layers | Mostly automated for common wallet flows |
embit |
Descriptor/PSBT flows and hardware-wallet-oriented integrations | Descriptor-oriented, standard-policy paths |
Optional note: btcaaron is designed as a pragmatic Taproot engineering layer on top of low-level primitives, prioritizing readability and reproducible testing workflows.
Requirements
- Python
>=3.10,<3.13 - Dependencies:
requests>=2.25.0,<3.0.0bitcoin-utils>=0.7.3,<0.8.0
Installation
python -m pip install btcaaron
Or from source:
git clone https://github.com/aaron-recompile/btcaaron.git
cd btcaaron
python -m pip install -e .
IDE environment tip (important)
Most IDE terminals run python/python3 from the currently selected interpreter.
Install and run with the same interpreter to avoid mismatched environments:
python -m pip install -e .
btcaaron-doctor
Quick Start (v0.2.3)
Taproot-native API — core features available now.
from btcaaron import Key, TapTree
alice = Key.from_wif("cRxebG...")
bob = Key.from_wif("cSNdLF...")
program = (TapTree(internal_key=alice)
.hashlock("secret", label="hash")
.multisig(2, [alice, bob], label="2of2")
.timelock(blocks=144, then=bob, label="csv")
.checksig(bob, label="backup")
).build()
print(program.address) # tb1p...
# Fund commit address without leaving IDE (auto UTXO selection)
from btcaaron import fund_program
# txid = fund_program(wif, program, 10_000) # 打币到 program.address
tx = (program.spend("hash")
.from_utxo("abc123...", 0, sats=1200)
.to("tb1p...", 666)
.unlock(preimage="secret")
.build())
tx.broadcast()
Legacy Quick Start (v0.1.x)
For backward compatibility with the v0.1.x API:
from btcaaron import WIFKey, quick_transfer
wif = "your_testnet_wif"
key = WIFKey(wif)
print("Taproot:", key.get_taproot().address)
balance = key.get_taproot().get_balance()
print("Balance:", balance, "sats")
if balance > 1000:
txid = quick_transfer(wif, "taproot", "tb1q...", amount=500, fee=300)
print("Broadcasted:", txid)
Descriptor Wallet Quick Start (tprv/xpriv)
For descriptor-style HD wallet flows (RGB-friendly), derive directly from tprv:
from btcaaron import taproot_balance_from_tprv, quick_transfer_tprv, taproot_descriptor_from_tprv
tprv = "tprv8ZgxMBicQKs..."
print(taproot_descriptor_from_tprv(tprv, branch=0)) # tr(tprv.../86h/1h/0h/0/*)
balance = taproot_balance_from_tprv(tprv, branch=0, index=0)
print("Balance:", balance, "sats")
txid = quick_transfer_tprv(
tprv,
"tb1p...",
amount=10_000,
fee=800,
branch=0,
index=0,
debug=True,
)
print("Broadcasted:", txid)
Full specification in DESIGN.md.
Testing
Run the test suite:
python -m pytest tests/
Run specific test suites:
# v0.2.3 comprehensive tests (pytest)
python -m pytest tests/test_btcaaron_v02.py -v
# v0.1.x example-based tests
python tests/test_btcaaron_v01.py
Environment Doctor
Use doctor before reporting install/runtime issues:
btcaaron-doctor
If doctor fails, re-install with the same interpreter:
python -m pip install -e .
btcaaron-doctor
Project Structure
btcaaron/
├── btcaaron/ # Core library
├── tests/ # Test suite
├── DESIGN.md # Architecture & roadmap
├── README.md
├── setup.py
└── LICENSE
Development
See DESIGN.md for architecture details and development roadmap.
Notes
- Default safety posture: testnet/regtest-first for everyday development and experiments.
- Mainnet (experimental): available behind explicit guardrails in
Transaction.broadcast(...). - Mainnet guardrails:
- default call blocks mainnet broadcast unless
allow_mainnet=True dry_run=Trueis available for no-side-effect routing checks- recommended smoke script:
python3 examples/core_test/scenarios/mainnet_readiness_smoke.py
- default call blocks mainnet broadcast unless
- v0.2.3 Status: Core Taproot spend-path flows are implemented and testnet-verified; ongoing work focuses on hardening, PSBT, and documentation.
Acknowledgments
Development of btcaaron is supported by an OpenSats grant.
OpenSats supports open-source contributors working on Bitcoin and related freedom tech.
Author
Aaron Zhang
Reproducible Taproot experiments · Script engineering · Educational tooling
https://x.com/aaron_recompile
License
MIT License
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file btcaaron-0.2.3.tar.gz.
File metadata
- Download URL: btcaaron-0.2.3.tar.gz
- Upload date:
- Size: 56.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
94f0df84fdd7c3c5cbef3f4a629289ff1565206c773e5e797d52482d31c6f261
|
|
| MD5 |
9912ad5f88e43b427c8d8018639233e5
|
|
| BLAKE2b-256 |
1a9019352c9e08a0c1e11a5afdc4a5fd9c11203d1e4d61669cab45d988fe52a9
|
File details
Details for the file btcaaron-0.2.3-py3-none-any.whl.
File metadata
- Download URL: btcaaron-0.2.3-py3-none-any.whl
- Upload date:
- Size: 49.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
140ccef04b99031fbdb14e656a1023b53941467879a2a15eb1568f46c2b281ef
|
|
| MD5 |
d6e709912766a04a7f76ea3b18944266
|
|
| BLAKE2b-256 |
103cb1331c6ed1bf9c1d145503c470b1fbcf780aaa74f2c3500a947a42dbec93
|