RedeemScript
Le 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.
Définition
Le redeemScript est le script de dépense effectif d'une UTXO P2SH (BIP-16, 2012). Lors du paiement vers une adresse P2SH, seul le hash du redeemScript apparaît dans le scriptPubKey sous la forme :
OP_HASH160 <hash160(redeemScript)> OP_EQUAL
Le contenu réel du script — qu'il s'agisse d'un multisig 2-of-3, d'un timelock, d'une condition complexe — n'est révélé que lorsque le propriétaire dépense l'UTXO. Cela permet d'envoyer à un destinataire sans connaître la nature de sa politique de dépense.
Exemple multisig 2-of-3
Le redeemScript classique d'un multisig 2-of-3 ressemble à :
OP_2 <pubkey1> <pubkey2> <pubkey3> OP_3 OP_CHECKMULTISIG
Encodé, il fait environ 105 octets. Son hash160 sur 20 octets devient l'adresse 3.... Au moment de dépenser, le scriptSig doit fournir :
OP_0 <sig1> <sig2> <redeemScript>
Le nœud reconstruit le hash du redeemScript, vérifie l'égalité, puis exécute le redeemScript avec les signatures sur la pile.
P2SH-P2WPKH et P2SH-P2WSH
Pendant la transition vers SegWit (2017-2021), de nombreuses adresses 3... étaient en fait des wrappers SegWit imbriqués dans du P2SH. Le redeemScript devient alors :
| Type | RedeemScript |
|------|--------------|
| P2SH-P2WPKH | OP_0 <hash160(pubkey)> |
| P2SH-P2WSH | OP_0 <sha256(witnessScript)> |
Cela permettait à des wallets ne supportant pas bech32 d'envoyer à du SegWit. Avec Taproot et l'adoption massive de bech32, cette astuce est devenue obsolète.
Importance opérationnelle
Perdre le redeemScript équivaut à perdre les fonds : aucun nœud, aucun outil ne peut le retrouver à partir du hash, par construction (préimage SHA-256 inversée impossible). C'est pourquoi un setup multisig P2SH/P2WSH doit toujours sauvegarder soit le redeemScript, soit l'ensemble des xpubs et le schéma de dépense (wsh(multi(2,xpub1,xpub2,xpub3))).
À retenir
Le redeemScript est la "vraie" politique de dépense cachée derrière une adresse P2SH. C'est un mécanisme d'engagement cryptographique qui a permis à Bitcoin d'introduire le multisig et SegWit sans changer les règles d'envoi.
Termes lies
- P2SHP2SH (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).
- ScriptPubKeyLe scriptPubKey est le script de verrouillage d'une UTXO. Il définit les conditions à satisfaire pour la dépenser (signature, hash, etc.). Tout output Bitcoin a un scriptPubKey. C'est la pièce centrale du modèle UTXO.
- 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.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.