P2SH
P2SH (Pay-to-Script-Hash, BIP-16) verrouille les fonds sur le hash d'un script de dépense. Permet des conditions complexes (multisig, timelock) avec des adresses commençant par 3.... Très utilisé pour les multisig avant l'ère SegWit. Il est désormais souvent imbriqué (P2SH-P2WPKH/P2WSH).
Origine et BIP-16
P2SH, Pay-to-Script-Hash, est introduit en 2012 par le BIP-16 (Gavin Andresen). C'est l'une des premières grandes évolutions de Bitcoin : il permet d'envoyer des fonds à un hash de script plutôt qu'à une simple clé publique. Le destinataire choisit librement la condition de dépense, sans que l'émetteur ait à la connaître ni à la payer.
Anatomie du script
scriptPubKey :
OP_HASH160 <20-byte script hash> OP_EQUAL
Pour dépenser, l'input doit fournir :
<sig1> <sig2> ... <redeemScript>
Le redeemScript est le vrai script (par exemple un multisig 2-of-3). Le hash160 de ce redeemScript doit correspondre au hash inscrit dans le scriptPubKey. La validation se fait en deux temps : d'abord le hash, ensuite l'évaluation du redeemScript avec les signatures fournies.
Format d'adresse
Adresses commençant par 3 sur mainnet, encodées en Base58Check avec préfixe 0x05. Exemple : 3J98t1WpEZ73CNmQviecrnyiWrnqRhWNLy.
Cas d'usage classiques
Multisig
2 <pubkey1> <pubkey2> <pubkey3> 3 OP_CHECKMULTISIG
Un classique 2-of-3 pour la trésorerie d'entreprise ou la sécurité d'un héritage. Avant P2SH, l'émetteur devait fournir lui-même tout le script encombrant ; avec P2SH il envoie à une simple adresse 3....
Timelocks
OP_CHECKLOCKTIMEVERIFY (BIP-65) et OP_CHECKSEQUENCEVERIFY (BIP-112) permettent des conditions du type « dépensable seulement après le bloc N ». P2SH cache la complexité au payeur.
Atomic swaps
Hash-time locked contracts (HTLC) historiques sur Bitcoin et Litecoin.
Avantages
| Avantage | Bénéfice |
|----------|---------|
| Adresses courtes | Compatible UX wallet |
| Coût payé par le dépensier | Économique pour l'émetteur |
| Conditions privées | Le script n'apparaît qu'à la dépense |
| Inter-opérable | Tous les wallets supportent les 3... |
Limites et évolution
P2SH a deux faiblesses :
- Malléabilité : avant SegWit, les TXIDs étaient sensibles à des modifications du scriptSig.
- Coût witness : tout le script s'inscrit dans la zone payante de la transaction, pas dans le witness à tarif réduit.
D'où l'apparition de P2SH-P2WPKH et P2SH-P2WSH (BIP-141), qui imbriquent du SegWit dans une enveloppe P2SH pour la compatibilité visuelle (3...) avec les vieux wallets, tout en bénéficiant du discount SegWit. Plus tard, P2WSH et P2TR ont rendu cette imbrication superflue.
Adoption actuelle
P2SH non-wrapped est en déclin (~5 % des UTXOs en 2025). Les multisig modernes utilisent P2WSH ou P2TR qui offrent confidentialité et discount.
À retenir
P2SH a démocratisé les scripts complexes dans Bitcoin. C'est l'innovation qui a rendu le multisig accessible à tous, jetant les bases de toute la programmabilité moderne.
Termes lies
- P2PKHP2PKH (Pay-to-Public-Key-Hash) est le format historique d'adresse Bitcoin (préfixe 1...). Le script verrouille les fonds sur le HASH160 de la clé publique. Il dévoile la clé publique uniquement à la dépense. Toujours valide mais peu utilisé sur les nouveaux wallets.
- P2SH-P2WPKHP2SH-P2WPKH est un format SegWit imbriqué dans P2SH (Nested SegWit). Permet à un wallet d'envoyer à une adresse 3... tout en bénéficiant des bonus SegWit. Conçu comme un pont de migration. De moins en moins utilisé au profit du Native SegWit.
- P2SH-P2WSHP2SH-P2WSH est un Nested SegWit pour des scripts complexes. Combine la rétro-compatibilité de P2SH et l'efficacité de SegWit. Surtout utilisé pour les multisigs migrant depuis P2SH. Aujourd'hui dépassé par P2WSH et P2TR.
- Multisig (multisignature)Une transaction multisig requiert plusieurs signatures pour être valide (M-of-N). Permet de partager le contrôle d'un wallet entre plusieurs parties ou clés stockées séparément. C'est l'outil clé pour la sécurité avancée et l'héritage. Standard avec Sparrow, Specter, Liana, Nunchuk.
- RedeemScriptLe redeemScript est le script complet d'une dépense P2SH, révélé au moment de dépenser. Son hash figure dans le scriptPubKey. Pour un multisig P2SH classique, c'est ce script qui décrit M-of-N. Sans le redeemScript, impossible de dépenser une UTXO P2SH.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.