This article covers Bitcoin's Taproot upgrade — activated at block 709,632 in November 2021 — and the three specific protocol changes it introduced: Schnorr signatures, Taproot itself, and Tapscript. By the end, you'll understand what each one does, why they matter together, and what they make possible that wasn't possible before.
The Problem Taproot Solved
Before Taproot, Bitcoin had a privacy leak baked into how transactions worked. Every time someone spent bitcoin from a complex arrangement — a multisig wallet, a time-locked contract, a Lightning channel close — the full spending conditions were exposed on the blockchain for anyone to see. A simple payment between two people looked visibly different from a 3-of-5 multisig spend. This meant observers could fingerprint transaction types, trace funds more easily, and identify which wallets were using advanced features.
- Complex scripts (the rules governing how bitcoin can be spent) were fully revealed at spend time, even the parts that weren't used
- Multisig transactions (requiring multiple private keys to authorize) were distinguishable from single-signature sends
- This created a two-tier privacy system: simple users got reasonable privacy, advanced users got less
- Script size limits constrained what smart contracts could realistically do on Bitcoin
What this means practically: Anyone analyzing the blockchain could tell the difference between a basic payment and a complex contract, which made advanced Bitcoin usage less private by design.
Schnorr Signatures: The Foundation
Schnorr signatures are the cryptographic primitive that makes everything else in Taproot work. Bitcoin originally used ECDSA (Elliptic Curve Digital Signature Algorithm) to prove transaction authorization. Schnorr is a different signature scheme — mathematically simpler, with one property ECDSA lacks: linearity. Linearity means you can combine multiple signatures or keys together and the math still works cleanly. This isn't just an academic nicety; it's the property that enables key aggregation.
- Key aggregation lets multiple signers combine their public keys into a single public key, and their signatures into a single signature — the result is indistinguishable from a solo signer's output
- Schnorr signatures are slightly smaller than ECDSA signatures, saving a modest amount of block space
- The scheme has a formal security proof (provably secure under the discrete logarithm assumption), whereas ECDSA's security proof is weaker
- Schnorr was known to be superior for decades but was patented until 2008 — Bitcoin launched in 2009 using the patent-free ECDSA instead
- Batch verification becomes possible: nodes can verify a block's worth of Schnorr signatures faster than checking each one individually
What this means practically: A 3-of-3 multisig transaction now produces a single key and single signature on-chain, looking exactly like any other transaction.
MAST: Revealing Only What You Use
This is where most explanations go wrong — they describe MAST (Merklized Alternative Script Trees) as a single feature, when it's really an encoding strategy. Before Taproot, if you had a script with five different spending conditions (Alice can spend after 30 days, OR Bob and Carol together, OR...), the entire script was published on-chain when any single condition was used. MAST arranges those conditions as leaves on a Merkle tree — a data structure where you can prove one piece of data belongs to a set without revealing the rest of the set.
- Only the spending condition actually used gets revealed; all other conditions stay hidden forever
- This shrinks transaction size because you're publishing one branch, not the whole tree
- It removes practical limits on script complexity — you can have hundreds of spending conditions without bloating the transaction that eventually spends the coins
- Unused conditions remain private: no one learns what alternative paths existed
What this means practically: A contract with 20 possible outcomes only reveals the one outcome that happened. The other 19 remain invisible.
How Taproot Combines Both Ideas
Taproot's core insight — attributed to Bitcoin developer Gregory Maxwell — is combining Schnorr key aggregation with MAST into a single output type called Pay-to-Taproot (P2TR). Every P2TR output contains a single public key on-chain. That key can be spent in two ways: the key path (a direct Schnorr signature, used when all parties agree) or the script path (revealing a MAST branch, used when the cooperative path fails).
- The key path is the optimistic case: all participants sign cooperatively, and the transaction looks identical to a simple single-signer payment
- The script path is the fallback: if cooperation breaks down, any valid branch of the Merkle tree can be revealed and used
- This creates a strong incentive to cooperate — doing so is cheaper and more private
- A Lightning Network channel close where both parties agree now looks exactly like Alice sending Bob a regular payment
- The internal key (the aggregated public key tweaked with the Merkle root) commits to both paths simultaneously, so neither can be changed after the output is created
What this means practically: The common case — everyone agrees — becomes the cheapest and most private path, and the blockchain never reveals that a complex contract existed at all.
Tapscript: Upgrading Bitcoin's Programming Language
Tapscript is the updated scripting language used inside Taproot's script path. It's not a dramatic rewrite — it's a set of targeted changes to Bitcoin Script, the simple stack-based language Bitcoin has always used. The most important change: Tapscript replaces the OP_CHECKMULTISIG opcode with OP_CHECKSIGADD, which works better with Schnorr signatures and is easier to extend in the future.
- OP_CHECKSIGADD processes signatures one at a time, avoiding a quirk in the old multisig opcode that wasted one byte per transaction (a bug Satoshi introduced that could never be fixed without a fork)
- Tapscript uses a versioning system for individual script leaves, making future upgrades possible through soft forks without a full consensus overhaul
- New opcodes can be added to specific leaf versions, meaning Bitcoin's scripting capabilities can expand incrementally
- Signature validation rules in Tapscript require signatures to be exactly 64 or 65 bytes, eliminating certain malleability vectors
What this means practically: Bitcoin's programming language now has a clear upgrade path — future features like vaults or covenants can be added more cleanly.
What Taproot Didn't Change
Taproot is sometimes described as if it unlocked smart contracts on Bitcoin. That framing overstates what happened. Bitcoin Script was always limited by design, and Taproot didn't fundamentally expand its computational model. It made existing capabilities more private and efficient, and created pathways for future upgrades.
- Bitcoin's block size, confirmation time, and consensus mechanism were untouched
- Taproot doesn't make old transaction types obsolete — legacy and SegWit addresses still work
- Adoption is opt-in: wallets and services had to update to support P2TR outputs, and adoption has been gradual
- Taproot alone doesn't enable recursive covenants, token protocols, or Turing-complete scripting — those require additional changes, some of which are still under debate
What this means practically: Taproot laid groundwork. The features people are most excited about — like OP_CTV or OP_CAT — would require separate future soft forks.
Quick Recap
- Schnorr signatures replaced ECDSA for Taproot outputs, enabling key aggregation that makes multisig indistinguishable from single-sig on-chain
- MAST hides unused spending conditions inside a Merkle tree — only the path you actually use is ever revealed
- Taproot (P2TR) merges both ideas so the cooperative case looks like a simple payment, and the complex fallback stays hidden unless needed
- Tapscript modernized Bitcoin's scripting with cleaner opcodes and a versioning system designed to make future upgrades less painful