Bech32 encoding has 3 parts:
(a) a human readable part that is "bc" for bitcoin (other chars used for other coins/chains)
(b) a separator which is always "1"
(c) the data part that is at least 6 characters long. In bitcoin (SegWit) addresses the first character is the witness version.
Bitcoin's Bech32 addresses are only defined for 2 witness versions and a total of 3 address types:
* P2WPKH that is using
witness version 0 and is a short address encoding 20 bytes of data (pubkey hash) and starts with bc1q (
q being the witness version)
* P2WSH that is also using
witness version 0 and is a longer address encoding 32 bytes of data (script hash) and starts with bc1q (
q being the witness version)
* P2TR that is using
witness version 1 and is as long as P2WSH address encoding 32 bytes of data (tweaked pubkey) and starts with bc1p (
p being the first byte of the data encoding the witness version).
The reason why you find so many addresses starting with bc1p is because Taproot was activated a while ago and people are using it hence the addresses.
Any other address you see that is using a different length or a different witness version (bc1
sw50qgdz25j with
s being
witness version 16) is non-standard and anybody can spend the coins sent to these addresses because there are no consensus rules defined for them yet.
but no bc1p1 prefixed addresses.
1 is only used as the separator not as part of the bech32 charset for encoding which is why you will never see it as part of the encoded data.
Note: If you see a string like this the human readable part is actually "bc1p" and the second 1 is considered as the separator and everything after that 1 is the data.
What cirumstance led to this fact that no such bc1p1 prefixed addresses were generated and seen out there ?
A separator was needed, symbols would have made copying harder so "1" was chosen. When it is used as separator it should be removed from the charset. More
here.