Skip to main content
added 152 characters in body
Source Link
Pieter Wuille
  • 109.7k
  • 9
  • 202
  • 318

The concept of an xpub originates from BIP32BIP32, 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 segwitsegwit, 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.

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.

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.

Source Link
Pieter Wuille
  • 109.7k
  • 9
  • 202
  • 318

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.