Home › Compare › BIP 84 vs BIP 86: SegWit vs Taproot wallets

BIP 84 vs BIP 86: SegWit vs Taproot wallets

BIP 84 derives keys for native SegWit P2WPKH addresses (bc1q...) signed with ECDSA; BIP 86 derives keys for single-key Taproot P2TR addresses (bc1p...) signed with Schnorr. Taproot inputs are smaller but its outputs are larger, so fees are similar for everyday payments, and every Taproot key-path spend looks alike on-chain.

Updated · 3 min read

At a glance

BIP 84BIP 86
TitleDerivation scheme for P2WPKH based accountsKey Derivation for Single Key P2TR Outputs
StatusDeployedDeployed
TypeSpecificationSpecification
Assigned2017-12-282021-06-22
AuthorsPavol RusnakAva Chow
In plain EnglishSpecifies the standard key path for HD wallets that use native SegWit addresses (those starting with 'bc1q'). Agreeing on this path means a user can restore the same seed phrase in different wallet apps and find the same addresses and funds.Defines the standard key path for HD wallets that use single-key Taproot addresses (those starting with 'bc1p'). It plays the same role for Taproot that BIP 84 does for SegWit, so seed phrases restore the same Taproot addresses across different wallets.

Two paths, two script types

BIP 84 and BIP 86 share the BIP 44 layout and differ in the purpose number (84' or 86') and in what each derived key becomes:

  • BIP 84, by Pavol Rusnak, hashes the public key with HASH160 and places it in a version 0 witness program, 0 <20-byte-key-hash>. Spending reveals the public key and an ECDSA signature.
  • BIP 86, by Ava Chow, treats the derived key as a Taproot internal key P and computes the output key Q = P + int(hashTapTweak(bytes(P)))G, committing to an unspendable script path as BIP 341 recommends for outputs with no scripts. The output is 1 <32-byte-output-key> (0x5120{key}) and is spent with a single Schnorr signature.

BIP 84 vs BIP 86 compared

BIP 84 BIP 86
First receiving path m/84'/0'/0'/0/0 m/86'/0'/0'/0/0
Script type P2WPKH (witness v0) P2TR (witness v1)
Address bc1q..., 42 characters bc1p..., 62 characters
Address encoding Bech32, BIP 173 Bech32m, BIP 350
Output contains 20-byte public key hash 32-byte tweaked public key
Spending witness ECDSA signature (up to 72 bytes) + 33-byte public key 64-byte Schnorr signature
Typical input size ~68 vB ~57.5 vB
Output size 31 bytes 43 bytes
Account key prefix zpub (testnet vpub) xpub (testnet tpub)
Output descriptor wpkh() tr()
Script type activated Block 481,824 (SegWit, 2017) Block 709,632 (Taproot, 2021)

The two BIPs' test vectors show the effect of the purpose number. Both use the published test phrase "abandon abandon ... about" (never use it for real funds): its first BIP 84 receiving address is bc1qcr8te4kr609gcawutmrza0j4xv80jy8z306fyu, and its first BIP 86 address is bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr. Same seed, different branch, unrelated addresses.

Taproot vs SegWit fees: smaller inputs, bigger outputs

A BIP 86 input is about 10.5 vB smaller than a BIP 84 input, because one 64-byte Schnorr signature replaces an ECDSA signature plus a public key. A P2TR output, though, is 12 bytes larger, because it stores a full 32-byte key instead of a 20-byte hash. For a typical payment with one input, one payment output and one change output, the two come out within a few vbytes of each other, depending on the recipient's address type. Taproot saves more the more inputs you spend at once, for example when consolidating many small coins. The transaction size calculator compares real transactions.

Privacy and compatibility

Every Taproot key-path spend looks the same on-chain: one 64-byte signature for one 32-byte key. A BIP 86 wallet's spends therefore resemble those of other Taproot users, including groups signing with MuSig2 and contracts whose script paths stayed hidden. BIP 84 spends reveal a public key and are always single-key P2WPKH.

On the other side, a sender needs BIP 350 Bech32m support to pay a bc1p address. Software that only implements BIP 173 Bech32 can pay bc1q addresses but rejects bc1p ones as having an invalid checksum. BIP 86 also registers no SLIP-0132 prefix: its account keys are plain xpubs, so watch-only setups should use a tr() output descriptor to avoid deriving the wrong address type.

Which should you choose?

  • BIP 84 if you need to be payable by software that supports Bech32 but not Bech32m, or your tools only understand zpub and wpkh().
  • BIP 86 if your wallet and the people who pay you support Bech32m, and you want smaller inputs and Taproot's uniform key-path spends.
  • Both: one seed phrase can hold BIP 84 and BIP 86 accounts side by side, and moving coins between them is an ordinary payment.

For the protocol-level picture, see SegWit vs Taproot (BIP 141 vs BIP 341); for every path at once, BIP 44 vs 49 vs 84 vs 86. The Taproot guide explains the tweak in more depth.

Frequently asked questions

Is Taproot cheaper than native SegWit?

To spend, yes: a single-key Taproot input is about 57.5 vB against about 68 vB for native SegWit. To receive, no: a Taproot output is 43 bytes against 31. For a typical one-input, two-output payment the totals end up within a few vbytes. Taproot saves noticeably when a transaction spends many inputs, such as a consolidation.

Can I send bitcoin from a bc1q address to a bc1p address?

Yes, if your wallet supports Bech32m (BIP 350), the encoding used for bc1p Taproot addresses. The type of address you send from doesn't matter; what matters is whether the sending software can encode a version 1 witness output. Software that only supports Bech32 (BIP 173) can pay bc1q but will reject bc1p addresses.

Is Taproot more private than native SegWit?

For single-key wallets the main gain is uniformity: every Taproot key-path spend shows one Schnorr signature for one 32-byte key, whether the output belongs to one person, a MuSig2 group or a contract with hidden scripts. Native SegWit spends are always single-key P2WPKH. Address reuse and amounts still affect privacy with either type.

Does a BIP 86 wallet use a zpub?

No. BIP 86 defines no new extended key prefix, and its test vectors use ordinary xprv and xpub keys. Wallets usually describe a Taproot account with a tr() output descriptor instead. A zpub is specific to BIP 84 native SegWit accounts, so importing a Taproot account as a zpub would generate the wrong addresses.

Can one seed phrase have both BIP 84 and BIP 86 accounts?

Yes. The purpose level (84' or 86') splits the same BIP 32 tree into separate branches, so the two accounts have unrelated keys and addresses. A wallet only shows the branches it scans. If you restore a seed and see no Taproot balance, check that the wallet is scanning m/86'/0'/0'.

BIPs in this article

Learn more

Guides

Free tools

Glossary