WitnessScript
Le witnessScript est l'équivalent SegWit du redeemScript pour P2WSH. Il décrit les conditions de dépense (multisig, timelock...) et est révélé dans la donnée witness. Bénéficie du discount SegWit. Indispensable pour les multisigs P2WSH.
Définition
Le witnessScript est le script Bitcoin complet qui définit les conditions de dépense d'un UTXO de type P2WSH (Pay-to-Witness-Script-Hash). À l'envoi, on n'inscrit dans l'output que le hash SHA-256 (32 bytes) de ce script — l'adresse bc1q... longue. Lors de la dépense, le wallet révèle l'intégralité du witnessScript dans la zone witness de la transaction, accompagné des signatures et autres données nécessaires.
Différence avec le redeemScript
| Aspect | redeemScript (P2SH) | witnessScript (P2WSH) |
|---|---|---|
| Hash | HASH160 (20 bytes) | SHA-256 (32 bytes) |
| Sécurité | 80 bits effectifs | 128 bits effectifs |
| Emplacement à la dépense | scriptSig | witness |
| Frais | 4 WU/byte | 1 WU/byte (discount) |
| Adresse | 3... | bc1q... |
Le passage à SHA-256 corrige une faiblesse théorique du HASH160 face aux attaques de collision (Wagner birthday attack) — critique pour le multisig.
Structure typique pour un multisig 2-of-3
Le witnessScript le plus courant est un multisig :
OP_2 <pubkey1> <pubkey2> <pubkey3> OP_3 OP_CHECKMULTISIG
À la dépense, la zone witness contient : OP_0, signature1, signature2, puis le witnessScript lui-même. Le nœud vérifie que SHA256(witnessScript) == hash inscrit dans le scriptPubKey, puis exécute le script.
Cas d'usage
- Multisig entre cosignataires (Sparrow, Specter, Nunchuk).
- Timelocks complexes : héritage, escrow.
- Scripts custom : HTLC pour Lightning (avant Taproot), hash-locks, conditions composées.
Limites et successeur
Le witnessScript a un défaut : il est entièrement révélé à la dépense. Tout le monde voit "c'est un 2-sur-3 entre ces 3 clés". Taproot (BIP-341, novembre 2021) résout cela : un multisig MuSig2 ressemble à un single-sig, et un script complexe peut être divulgué partiellement (script-path) via un Merkle tree.
À retenir
Le witnessScript est le coeur du multisig P2WSH moderne (2017-2021). Il offre frais réduits et sécurité supérieure au redeemScript, mais cède peu à peu sa place à Taproot pour les setups avancés.
Termes lies
- P2WSHP2WSH (Pay-to-Witness-Script-Hash) est l'équivalent SegWit de P2SH (préfixe bc1q... longue). Verrouille sur un hash de script (multisig par ex.). Plus économique que P2SH-P2WSH. Standard pour les multisigs SegWit jusqu'à l'arrivée de Taproot.
- 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.
- SegWit (Segregated Witness)SegWit, activé en août 2017, sépare la donnée witness du reste de la transaction. Cela résout la malléabilité, augmente la capacité effective des blocs et active Lightning. Soft fork emblématique issu de la Blocksize War. Existe en V0 (P2WPKH/P2WSH) et V1 (Taproot).
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.