ScriptPubKey
Le 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.
Définition
Le scriptPubKey (parfois noté "locking script") est le programme Bitcoin Script attaché à chaque output d'une transaction. Il encode les conditions cryptographiques que devra satisfaire toute future tentative de dépense de cet output. Tant que ces conditions ne sont pas remplies, les bitcoins de l'UTXO restent verrouillés.
Place dans l'output
Chaque output d'une transaction Bitcoin contient exactement deux champs :
[8 octets] value (montant en satoshis)
[varint+N] scriptPubKey (script de verrouillage)
Le scriptPubKey est donc la "serrure", la value est ce qui est dans le coffre, et le futur scriptSig (ou scriptWitness) sera la "clé".
Templates standards
Bitcoin Core reconnaît plusieurs formats standards :
| Type | scriptPubKey | Adresse |
|------|--------------|---------|
| P2PK | <pubkey> OP_CHECKSIG | Pas d'adresse (obsolète) |
| P2PKH | OP_DUP OP_HASH160 <hash160> OP_EQUALVERIFY OP_CHECKSIG | 1... |
| P2SH | OP_HASH160 <hash160> OP_EQUAL | 3... |
| P2WPKH | OP_0 <hash160> (20 octets) | bc1q... (bech32) |
| P2WSH | OP_0 <sha256> (32 octets) | bc1q... (bech32) |
| P2TR | OP_1 <pubkey x-only> (32 octets) | bc1p... (bech32m) |
| OP_RETURN | OP_RETURN <data> (≤ 80 octets) | Pas d'adresse |
Comment c'est utilisé
Lorsqu'une nouvelle transaction veut dépenser un output, le nœud :
- Récupère le scriptPubKey de l'output référencé.
- Concatène avec le scriptSig ou exécute la logique SegWit/Taproot équivalente.
- Évalue : si la pile finit avec "true" (et selon les règles de validation), la dépense est valide.
Évolution des formats
- 2009 : P2PK majoritaire au début (les premières transactions de Satoshi).
- 2010-2017 : P2PKH dominant.
- 2012 : Apparition de P2SH (BIP-16).
- 2017 : SegWit, format Bech32, P2WPKH et P2WSH.
- 2021 : Taproot, format Bech32m, P2TR.
Aujourd'hui (2025-2026), la majorité des nouveaux paiements se fait en P2WPKH et P2TR. Les anciens types subsistent pour la rétrocompatibilité.
Relation avec les adresses
Une adresse Bitcoin est simplement un encodage humain d'un scriptPubKey :
bc1q... ↔ OP_0 <hash160 de la pubkey>
Décoder une adresse, c'est reconstituer le scriptPubKey qu'elle encode. Inversement, tout scriptPubKey "standard" peut être encodé en adresse, ce qui n'est pas le cas des scripts custom.
À retenir
Le scriptPubKey est la "définition de propriété" sur Bitcoin. Chaque satoshi en circulation est verrouillé par exactement un scriptPubKey, et cette structure modulaire est ce qui permet à Bitcoin d'évoluer (multisig, SegWit, Taproot) sans casser le modèle UTXO.
Termes lies
- ScriptSigLe scriptSig est le script de déverrouillage fourni par l'input qui dépense une UTXO. Pour P2PKH, il contient signature et clé publique. Avec SegWit, son rôle est repris par scriptWitness. Doit produire « true » avec scriptPubKey lors de la validation.
- ScriptWitnessLe scriptWitness contient les données de déverrouillage des inputs SegWit. Stocké en dehors du scriptSig, il bénéficie du discount de poids. Pour P2WSH, il inclut signatures et witnessScript. Introduit par SegWit (BIP-141).
- UTXOUTXO (Unspent Transaction Output) designe une sortie de transaction non depensee. Contrairement a un compte bancaire avec un solde, Bitcoin fonctionne avec des UTXO : chaque transaction consomme des UTXO existants et en cree de nouveaux. C'est comme manipuler des billets plutot qu'un solde numerique.
- Output (vout)Un output crée une nouvelle UTXO, verrouillée par un scriptPubKey. Il contient le montant en satoshis et la condition à remplir pour le dépenser. Une transaction crée 1 à plusieurs outputs. Une fois consommé, un output devient un input.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.