The concept of an xpub
originates from BIP32, where it denotes an extended public key, from which multiple child keys can be derived.
At the time of BIP32, there was really only one address type commonly used, pay-to-pubkey-hash (P2PKH). Thus, BIP32 were commonly understood to imply a sequence of derived P2PKH addresses.
After segwit, when other address types came in common use, like P2SH-P2WPKH and P2WPKH, people needed a way to convey "a BIP32 extended public key, but the derived addresses are P2SH-P2WPKH". This became the ypub
scheme defined in BIP49 for P2SH-P2WPKH, and later the zpub
scheme in BIP84 for P2WPKH. They contain the exact same information as a BIP32 extended public key, but with a different prefix to denote the corresponding address type. Various other variants were defined and adopted by some software, e.g. Zpub
for P2WSH, but not standardized through the BIP process as far as I know.
Other software never adopted ypub
/zpub
/Zpub
/..., as the continuing need for new prefixes does not scale well, and the notion of trying to pack all address derivation information into a single key string also just doesn't work for more complex constructions like multisig. For example, in the newer output descriptors (BIP380) standard, xpub
is always used, but one would use wpkh(xpub...)
to indicate a P2WPKH address type.
As far as I know, there is no *pub
-like standard for P2TR yet, and in my opinion there should not be. It is much clearer to convey address type information outside of key strings.
Disclaimer: I'm the author of BIP32, and co-author of BIP380.