Which descriptor should I choose: pkh(), sh(wpkh()), wpkh(), or tr()?
If your wallet shows a descriptor string and you don't know which of these codes matches your coins, this tells you what each one means without touching your seed.
**The four single-key descriptor types are pkh(), sh(wpkh()), wpkh(), and tr(), each representing a different way to build an address.**
What you're looking at when you see a descriptor
Many modern wallets show a line with something like pkh(), sh(wpkh()), wpkh(), or tr() and don't explain what each one means. It's not an error: these are the ways a single key can build an address.
Bitcoin Core's documentation says it plainly: "The four single-key types are written pkh(), sh(wpkh()), wpkh(), and tr()." (Bitcoin Core · doc/descriptors.md).
What each one does with your key
pkh() builds a legacy address, the oldest format and the least used today for receiving.
sh(wpkh()) wraps a segwit address inside a legacy structure, so older wallets can pay to it. wpkh() is native segwit, the common format for modern addresses. tr() is taproot, the newest scheme, with privacy and contract advantages.
How to find out which one is yours
The right descriptor depends on how your wallet was created and which address you used to receive. If you have the original backup or derivation configuration, that's where you'll find the missing piece.
Don't try to guess or test descriptors at random: you could end up looking at a different derivation and think your bitcoin is gone. The seed is only one part; the descriptor decides the path.
What this list doesn't resolve: which one is yours
The fact that these four exist doesn't tell you which descriptor your wallet uses. You still need the derivation path, the address type you used, or the original wallet configuration backup.
Source: Bitcoin Core · doc/descriptors.md