Skip to content
Back to skills

Taproot

ASecurity

Taproot soft fork: BIP340 (Schnorr signatures), BIP341 (key tweak + script-path), BIP342 (Tapscript). x-only pubkeys, key-path vs script-path spending, control block, leaf versions, taptweak math. Quick refs: tweak math, control block layout, sighash differences, building a taptree. USE WHEN: building/spending P2TR outputs, designing taptrees, reasoning about Schnorr-only contexts.

  • 31 stars
  • 0 votes
  • 0 copies
  • 3 views
  • Added September 8, 2026
ai-agentsgo

Security analysis

A100/100

Pro scans all 5 files and shows the line behind each finding

Scanned September 8, 2026

npx -y skills add claude-dev-suite/claude-dev-suite --skill taproot --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Taproot?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Taproot
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/claude-dev-suite-taproot/badge)](https://www.skillsdirectory.com/skills/claude-dev-suite-taproot)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: bitcoin-taproot
description: |
  Taproot soft fork: BIP340 (Schnorr signatures), BIP341 (key tweak +
  script-path), BIP342 (Tapscript). x-only pubkeys, key-path vs
  script-path spending, control block, leaf versions, taptweak math.
  Quick refs: tweak math, control block layout, sighash differences,
  building a taptree.
  USE WHEN: building/spending P2TR outputs, designing taptrees,
  reasoning about Schnorr-only contexts.
allowed-tools: Read, Grep, Glob
---

# Taproot (BIP340 / 341 / 342)

> **Quick refs**: [tweak.md](quick-ref/tweak.md), [control-block.md](quick-ref/control-block.md), [sighash-default.md](quick-ref/sighash-default.md), [taptree.md](quick-ref/taptree.md)

Activated November 2021 (block 709,632). Three BIPs:

- **BIP340** — Schnorr signatures over secp256k1.
- **BIP341** — Taproot output: P2TR scriptPubKey, key-path / script-path
  spending, taptweak.
- **BIP342** — Tapscript: rules for script-path spends. See
  [scripts/quick-ref/tapscript.md](../scripts/quick-ref/tapscript.md).

## Output construction

```
P = internal_pubkey (x-only, 32 bytes)
TaptreeRoot R = merkle root of script tree (or empty)
t = TaggedHash("TapTweak", P || R)
Q = lift_x(P) + t*G   (the "tweaked" pubkey, x-only)
scriptPubKey = OP_1 <Q>
```

If you have only a key-path (no scripts), `R = ""` and the tweak still
prevents key reuse leaking the internal key.

## Key-path spend

```
witness = [<schnorr_sig>]    # 64 bytes (SIGHASH_DEFAULT) or 65 bytes
```

Privacy-equivalent to single-sig. **The most efficient** Taproot spend.
Outsiders cannot tell whether a script-path even exists — every Taproot
output looks like a single-key output.

## Script-path spend

```
witness = [<args0>, <args1>, ..., <leaf script>, <control block>]
```

- Args 0..N: stack inputs to the leaf.
- Leaf script: the Tapscript bytes being executed.
- Control block (33 + 32×depth bytes):
  - byte 0: `0xc0 | (parity_of_Q)`. The leaf version.
  - bytes 1..33: internal pubkey P.
  - bytes 33..end: merkle path (32 bytes per level).

Validator reconstructs `taproot_root` from leaf hash + path, computes
expected `Q = P + tweak*G`, compares to `Q` in scriptPubKey. If match,
runs the leaf script per BIP342.

## x-only pubkeys

- All Schnorr keys in BIP340 are encoded as **32-byte x-coordinate
  only** (no parity byte).
- The "even Y" convention: parity is fixed to even by negating the
  private key when needed.
- For tweaked output keys (`Q`), parity bit lives in the control block
  byte 0 LSB.

## Sighash (BIP341)

`SIGHASH_DEFAULT = 0x00` is the new default and equivalent to ALL but
with the new digest. Differences from BIP143:
- Hashes commit to **all spent prevout amounts** and scriptPubKeys
  (not just the current input).
- For SINGLE: commit only to single output, but with cleaner digest.
- Annex (last witness element prefixed `0x50`) is committed.

64-byte sig if SIGHASH_DEFAULT, else 65 bytes (1-byte sighash suffix).

## Sigops budget

Tapscript replaces "fixed sigops cost" with a **budget**:
`budget = floor(witness_weight / 50)`. Each `CHECKSIG`/`CHECKSIGADD`
consumes 50 from the budget. Allows long script paths to validate
proportionally to their bytes.

## Why Taproot

1. **Privacy**: spending paths reveal **only** the path used. Cooperative
   spends (key-path) look identical to plain single-sig.
2. **Aggregation**: Schnorr's linearity → MuSig2 key aggregation
   off-chain. n parties can produce one signature for one pubkey.
3. **Smaller witnesses** for cooperative cases.
4. **Soft-fork upgrade space**: leaf versions, OP_SUCCESS opcodes,
   annex.

## See also

- [scripts/quick-ref/tapscript.md](../scripts/quick-ref/tapscript.md)
- [../../cryptography/schnorr/SKILL.md](../../cryptography/schnorr/SKILL.md)
- [../../cryptography/musig2/SKILL.md](../../cryptography/musig2/SKILL.md)
- [miniscript/SKILL.md](../miniscript/SKILL.md)

Files in this skill

  • SKILL.md3.8 KB
  • quick-ref/control-block.md2.5 KB
  • quick-ref/sighash-default.md2.1 KB
  • quick-ref/taptree.md2.4 KB
  • quick-ref/tweak.md2.2 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.