<p>To answer both of your questions, each BIP is intended for generating a specific address type like 1, 3, and bc1q.</p>
<p>BIPs 44, 49 and 84 define standard derivation paths that all wallets should use for defining P2PKH (and P2SH), P2WPKH-P2SH, and segwit version 0 addresses P2WPKH and P2WSH respectively, and you also might be surprised to know that <a href="https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki" rel="nofollow noreferrer">BIP 86</a> uses the <code>m/86'</code> prefix for creating Taproot addresses. So the standards weren't exactly designed with extended public keys in mind - in fact, Taproot uses xpub (and presumably Xpub for testnet, although this was not shown in test vectors), and not zpub, or ypub.</p>
<p>Testnet addresses and keys for all these are derived in the manner specified in BIP44.</p>

CC BY-SA 4.0
2023-07-22T16:03:22.153Z
First of all, thanks for your reply. But nowhere in BIP44 does it say that this standard is intended for P2PKH, but that it is a standard that only defines the derivation path. Also, since it was wanted to somehow separate the derivation path for P2WPKH addresses, then BIP84 was created that suggests using that path for a given type of address (it doesn't say anything specific about addresses, just "hey if you want P2VPKH use this path"). We can still use BIP44 and that derivation path for all addresses. This is how the golang bitcoin wallet works. So the answer to my questions is YES?
dassd
CC BY-SA 4.0
2023-07-22T16:09:25.310Z
BIP44 was written at a time when P2PKH was the only reasonable type of address to use for singlesig constructions (P2SH-P2WPKH, P2WPKH and P2TR did not yet exist) so it was probably just not considered at the time it was written. I think these days, BIP44 is typically considered to be P2PKH implicitly.
Pieter Wuille
CC BY-SA 4.0
2023-07-22T16:47:14.070Z
@PieterWuille Yes, I agree, but in the end it's just a standard for the derivation path, even though that path is implicitly considered to be used only for P2PKH. I mean it can be used for any type of address, the golang bitcoin wallet implementation only uses that path. As far as I understand. However I guess in the end it is best to use output descriptors.
dassd
CC BY-SA 4.0
2023-07-22T16:49:48.417Z
@Filip That's possible. Ultimately, every piece of software chooses what they implement, and if things are unclear, they are up to interpretation. In this case I think the letter of the BIP44 document and what it's commonly interpreted to mean are different, which can be confusing. That's not unique to BIP44 by the way - for example, BIP32 also specified a derivation path for keys which almost nobody uses (BIP44 etc use a different one), and when one says "BIP32", it's not commonly understood to refer to that derivation path.
Pieter Wuille
CC BY-SA 4.0
2023-07-22T16:54:46.643Z
@PieterWuille Yes, you are absolutely right. Especially for people who are just learning things. I guess you sensed how much confusion arose in me, but I guess that's part of the process. In any case, we could say that the answers to my questions are YES, even though the addresses are implicitly determined by using some standard and deriving paths from that standard?
dassd
CC BY-SA 4.0
2023-07-22T17:17:33.783Z
@Filip By the letter of the BIPs, BIP44 is not specific to any address type, BIP49 is P2SH-P2WPKH, BIP84 is P2WPKH, and BIP86 is single-key P2TR. BIP44 is however commonly understood to be implicitly P2PKH. There is no one answer to what things mean, as technology and context evolves, and so does the understanding. You could be explicit and say "BIP44 derivation paths" if you mean just the derivation path proposed in it and not the rest of the document or what it entails.
Pieter Wuille
CC BY-SA 4.0
2023-07-22T17:23:59.543Z
@PieterWuille Yes, I agree, I think so too. Thank you. All the best.
dassd
CC BY-SA 4.0
2023-07-22T17:34:10.320Z
Also you might see some wallets using the 44 path for legacy P2SH (the one used before segwit and P2WPKH-P2SH was invented) - slight inaccuracy in my answer. Sorry about that.
Zenul_Abidin
CC BY-SA 4.0
2023-07-22T17:40:38.283Z
@Zenul_Abidin Yes, I got it and, for example, in the description of the golang btc wallet (https://bitcoin.stackexchange.com/questions/75165/what-is-bitcoin-locking-and-unlocking-script) it says the following: "btcwallet uses the ```m/44'/<coin type>'/<account>'/<branch>/<address index>``` HD path for all derived addresses, as described by BIP0044." Thus, it uses one derivation path for all addresses regardless of its type. And it's legit since this standard doesn't define the addresses you have to use here (although implicit P2PKH).
dassd
CC BY-SA 4.0
2023-07-22T18:26:43.003Z
@Filip My guess is that that README entry was written at a time when btcwallet only supported P2PKH and BIP44, and no other address types, and has just not been updated since. Looking at the source code, I see mention of BIP49, BIP84, and BIP86 too.
Pieter Wuille
CC BY-SA 4.0
2023-07-22T18:36:43.897Z
@PieterWuille I haven't gone into the source code (yet), but then it looks like they also support other derivation path standards and separate addresses by them. Possible. Maybe they even support output descriptors then.
dassd
CC BY-SA 4.0
2023-07-22T14:55:27.347Z
2023-07-23T03:51:13.307Z
2023-07-23T03:51:13.307Z
Zenul_Abidin
<p>I have a few questions regarding wallets and BIP44/49/89 standards.</p>
<p>In many places I found that BIP44 is used for traditional addresses (P2PKH) and that the path is <code>m/44'/...</code>. Also, if we want another type of address, say P2WPH, then we use different standard, it this case BIP84 and the path <code>m/84'/...</code>, and so on...</p>
<p>One of the places I found it would be the following answer: <a href="https://bitcoin.stackexchange.com/a/77917">link</a>.</p>
<p>Second place: <a href="https://bitcoin.stackexchange.com/a/98800/140802">link</a>. Andrew Chow wrote the following:</p>
<blockquote>
<p>By this logic, the xprv and xpub prefixes used previously then
indicate that legacy addresses should be made. Hence BIP 44 shows
xprv.</p>
</blockquote>
<p>So I started to think that way too. That is, the type of the address is determined by the standard used. So:</p>
<ol>
<li>BIP44 - traditional addresses (P2PKH), XPUB (it's defined in BIP32 but used here), <code>m/44'/...</code> derivation path</li>
<li>BIP49 - P2WPKH-nested-in-P2SH, YPUB, <code>m/49'/...</code> derivation path</li>
<li>BIP84 - P2WPH, ZPUB, <code>m/84'/...</code> derivation path</li>
</ol>
<p>That's what I thought until I looked at golang's implementation of <a href="https://github.com/btcsuite/btcwallet" rel="nofollow noreferrer">bitcoin wallet</a>. Namely, it says there that it uses only BIP44 standard. Since the given wallet is used (I assume) for all addresses (not just P2PKH, P2WPKH-nested-in-P2SH and P2WPH, but for all as many as there are), I got a bit confused and started to think differently about these standards and how they are used. So I have a two questions.</p>
<p><strong>1. BIP44 is just a derivation path standard, it doesn't decide what type of address you have to generate from it?</strong> You can generate any &quot;type&quot; of address you want and that's just how the golang bitcoin wallet works? It uses the BIP44 derivation path, but leaf-level tree keys are used for all address types.</p>
<p><strong>2. Although BIP44 can be used for all addresses (if the answer to the previous question is yes), there are also standards that define other derivation paths such as BIP49 and BIP84 whose purpose is only to separate keys intended for a certain type of address to other derivation paths, nothing but that? But even if, for example, BIP84 says it's for P2WPKH, it's just a derivation path, nothing else.</strong> I mean, you can also use P2PKH here (it's weird, but you can) since it's a derivation path? Actually, they just wanted to kind of point out that if you use P2WPKH then a different derivation path is used, but you can still use the BIP44 derivation path?</p>

CC BY-SA 4.0
2023-07-22T02:18:39.373Z
Have you tried reading those BIPs?
Pieter Wuille
CC BY-SA 4.0
2023-07-22T08:24:51.323Z
@PieterWuille Hello Pieter. Yes, I have read it, and from what I understand I would say the answers to my questions are YES. In BIP84 it says the following: "This BIP defines the derivation scheme for HD wallets using the P2WPKH (BIP 173) serialization format for segregated witness transactions." and "With the usage of P2WPKH transactions it is necessary to have a common derivation scheme." From that I'd say it's just a derivation path with purpose to separate a certain type of address-P2WPKH, although BIP44 can still be used. However, I'm not sure because of the answers I found on this site.
dassd
<wallet><bip32-hd-wallets><bip44>
Does the used standard (BIP44, BIP49, BIP84) define the type of addresses used?
dassd
# Does the used standard (BIP44, BIP49, BIP84) define the type of addresses used?

(Asked by: username_0 on 2023-07-22)

I have a few questions regarding wallets and BIP44/49/89 standards.

In many places I found that BIP44 is used for traditional addresses (P2PKH) and that the path is `m/44'/...`. Also, if we want another type of address, say P2WPH, then we use different standard, it this case BIP84 and the path `m/84'/...`, and so on...

One of the places I found it would be the following answer: [link](https://bitcoin.stackexchange.com/a/77917).

Second place: [link](https://bitcoin.stackexchange.com/a/98800/140802). Andrew Chow wrote the following:

> By this logic, the xprv and xpub prefixes used previously then
> indicate that legacy addresses should be made. Hence BIP 44 shows
> xprv.

So I started to think that way too. That is, the type of the address is determined by the standard used. So:

1. BIP44 - traditional addresses (P2PKH), XPUB (it's defined in BIP32 but used here), `m/44'/...` derivation path
2. BIP49 - P2WPKH-nested-in-P2SH, YPUB, `m/49'/...` derivation path
3. BIP84 - P2WPH, ZPUB, `m/84'/...` derivation path

That's what I thought until I looked at golang's implementation of [bitcoin wallet](https://github.com/btcsuite/btcwallet). Namely, it says there that it uses only BIP44 standard. Since the given wallet is used (I assume) for all addresses (not just P2PKH, P2WPKH-nested-in-P2SH and P2WPH, but for all as many as there are), I got a bit confused and started to think differently about these standards and how they are used. So I have a two questions.

**1. BIP44 is just a derivation path standard, it doesn't decide what type of address you have to generate from it?** You can generate any "type" of address you want and that's just how the golang bitcoin wallet works? It uses the BIP44 derivation path, but leaf-level tree keys are used for all address types.

**2. Although BIP44 can be used for all addresses (if the answer to the previous question is yes), there are also standards that define other derivation paths such as BIP49 and BIP84 whose purpose is only to separate keys intended for a certain type of address to other derivation paths, nothing but that? But even if, for example, BIP84 says it's for P2WPKH, it's just a derivation path, nothing else.** I mean, you can also use P2PKH here (it's weird, but you can) since it's a derivation path? Actually, they just wanted to kind of point out that if you use P2WPKH then a different derivation path is used, but you can still use the BIP44 derivation path?

**Tags:** wallet, bip32-hd-wallets, bip44

> **Comments:**
> **username_1**: Have you tried reading those BIPs?  
> **username_0**: @username_1 Hello username_1. Yes, I have read it, and from what I understand I would say the answers to my questions are YES. In BIP84 it says the following: "This BIP defines the derivation scheme for HD wallets using the P2WPKH (BIP 173) serialization format for segregated witness transactions." and "With the usage of P2WPKH transactions it is necessary to have a common derivation scheme." From that I'd say it's just a derivation path with purpose to separate a certain type of address-P2WPKH, although BIP44 can still be used. However, I'm not sure because of the answers I found on this site.  

---

## 1 answers

### Answer by username_2 on 2023-07-22. Score: 0

To answer both of your questions, each BIP is intended for generating a specific address type like 1, 3, and bc1q.

BIPs 44, 49 and 84 define standard derivation paths that all wallets should use for defining P2PKH (and P2SH), P2WPKH-P2SH, and segwit version 0 addresses P2WPKH and P2WSH respectively, and you also might be surprised to know that [BIP 86](https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki) uses the `m/86'` prefix for creating Taproot addresses. So the standards weren't exactly designed with extended public keys in mind - in fact, Taproot uses xpub (and presumably Xpub for testnet, although this was not shown in test vectors), and not zpub, or ypub.

Testnet addresses and keys for all these are derived in the manner specified in BIP44.

> **Comments:**
> **username_0**: First of all, thanks for your reply. But nowhere in BIP44 does it say that this standard is intended for P2PKH, but that it is a standard that only defines the derivation path. Also, since it was wanted to somehow separate the derivation path for P2WPKH addresses, then BIP84 was created that suggests using that path for a given type of address (it doesn't say anything specific about addresses, just "hey if you want P2VPKH use this path"). We can still use BIP44 and that derivation path for all addresses. This is how the golang bitcoin wallet works. So the answer to my questions is YES?  
> **username_1**: BIP44 was written at a time when P2PKH was the only reasonable type of address to use for singlesig constructions (P2SH-P2WPKH, P2WPKH and P2TR did not yet exist) so it was probably just not considered at the time it was written. I think these days, BIP44 is typically considered to be P2PKH implicitly.  
> **username_0**: @username_1 Yes, I agree, but in the end it's just a standard for the derivation path, even though that path is implicitly considered to be used only for P2PKH. I mean it can be used for any type of address, the golang bitcoin wallet implementation only uses that path. As far as I understand. However I guess in the end it is best to use output descriptors.  
> **username_1**: @Filip That's possible. Ultimately, every piece of software chooses what they implement, and if things are unclear, they are up to interpretation. In this case I think the letter of the BIP44 document and what it's commonly interpreted to mean are different, which can be confusing. That's not unique to BIP44 by the way - for example, BIP32 also specified a derivation path for keys which almost nobody uses (BIP44 etc use a different one), and when one says "BIP32", it's not commonly understood to refer to that derivation path.  
> **username_0**: @username_1 Yes, you are absolutely right. Especially for people who are just learning things. I guess you sensed how much confusion arose in me, but I guess that's part of the process. In any case, we could say that the answers to my questions are YES, even though the addresses are implicitly determined by using some standard and deriving paths from that standard?  
> **username_1**: @Filip By the letter of the BIPs, BIP44 is not specific to any address type, BIP49 is P2SH-P2WPKH, BIP84 is P2WPKH, and BIP86 is single-key P2TR. BIP44 is however commonly understood to be implicitly P2PKH. There is no one answer to what things mean, as technology and context evolves, and so does the understanding. You could be explicit and say "BIP44 derivation paths" if you mean just the derivation path proposed in it and not the rest of the document or what it entails.  
> **username_0**: @username_1 Yes, I agree, I think so too. Thank you. All the best.  
> **username_2**: Also you might see some wallets using the 44 path for legacy P2SH (the one used before segwit and P2WPKH-P2SH was invented) - slight inaccuracy in my answer. Sorry about that.  
> **username_0**: @username_2 Yes, I got it and, for example, in the description of the golang btc wallet (https://bitcoin.stackexchange.com/questions/75165/what-is-bitcoin-locking-and-unlocking-script) it says the following: "btcwallet uses the ```m/44'/<coin type>'/<account>'/<branch>/<address index>``` HD path for all derived addresses, as described by BIP0044." Thus, it uses one derivation path for all addresses regardless of its type. And it's legit since this standard doesn't define the addresses you have to use here (although implicit P2PKH).  
> **username_1**: @Filip My guess is that that README entry was written at a time when btcwallet only supported P2PKH and BIP44, and no other address types, and has just not been updated since. Looking at the source code, I see mention of BIP49, BIP84, and BIP86 too.  
> **username_0**: @username_1 I haven't gone into the source code (yet), but then it looks like they also support other derivation path standards and separate addresses by them. Possible. Maybe they even support output descriptors then.  

---

