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.