Summary
This PR is a PoC of BIP: Pay to Schnorr Key Hash (P2SKH), a new native SegWit output type that combines the compact 20-byte program of P2WPKH with the Schnorr signature efficiency of P2TR key-path spending.
Motivation
Existing single-key output types present an unresolved trade-off:
- P2WPKH achieves a 22-byte scriptPubKey by hashing the key, but uses ECDSA and requires the full 33-byte compressed pubkey in the witness (~108 witness bytes).
- P2TR adopts Schnorr signatures (64-byte witness), but embeds the full 32-byte x-only pubkey in the scriptPubKey, producing a 34-byte output — 12 bytes larger than P2WPKH — and exposing the key in every unspent output.
P2SKH closes this gap. The locking script commits to hash160(P.x) (20 bytes); spending
requires a single 64-byte Schnorr signature. The verifier recovers the public key from
the signature and checks its hash against the program — no key exposure in the UTXO set.
Key properties:
| Property | P2WPKH | P2TR | P2SKH |
|---|---|---|---|
| scriptPubKey size | 22 bytes | 34 bytes | 22 bytes |
| Witness size (key spend) | ~108 bytes | 64 bytes | 64 bytes |
| Key in output | yes (hash) | yes (raw) | no (hash) |
| Signature scheme | ECDSA | Schnorr | Schnorr |
P2SKH achieves the smallest combined on-chain footprint of any current single-key type, reducing output sizes and UTXO set pressure while retaining the full efficiency of Schnorr signing.
Open Questions
Witness version conflict with BIP360. BIP360 currently claims witness version 2. If both proposals advance, one must cede its version number. The authors consider version 3 (
OP_3) a viable alternative for P2SKH; the tradeoffs (address prefix, deployment ordering) should be discussed here.Naming. "P2SKH" (Pay to Schnorr Key Hash) is the working name and follows the established
P2*KHpattern. "P2TRKH" (Pay to Taproot Key Hash) has been suggested as an alternative to emphasise lineage from the Taproot family of Schnorr-based schemes. Other suggestions are welcome.
Thanks for taking a look.