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
Metadata
Release files for btcaaron 0.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| btcaaron-0.2.3.tar.gz | 56.7 kB | Without provenance | Details for btcaaron-0.2.3.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| btcaaron-0.2.3-py3-none-any.whl | Python 3 | none | any | Details for btcaaron-0.2.3-py3-none-any.whl |
Total release size: 106.6 kB
Release files / btcaaron-0.2.3.tar.gz
| Download URL | btcaaron-0.2.3.tar.gz |
|---|---|
| Size | 56.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
94f0df84fdd7c3c5cbef3f4a629289ff1565206c773e5e797d52482d31c6f261
|
|
BLAKE2b-256 checksum How to use checksums |
1a9019352c9e08a0c1e11a5afdc4a5fd9c11203d1e4d61669cab45d988fe52a9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Release files / btcaaron-0.2.3-py3-none-any.whl
| Download URL | btcaaron-0.2.3-py3-none-any.whl |
|---|---|
| Size | 49.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
140ccef04b99031fbdb14e656a1023b53941467879a2a15eb1568f46c2b281ef
|
|
BLAKE2b-256 checksum How to use checksums |
103cb1331c6ed1bf9c1d145503c470b1fbcf780aaa74f2c3500a947a42dbec93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.14
|
Security for btcaaron 0.2.3
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.