Aller au contenu principal
Script

Script (Bitcoin Script)

Bitcoin Script est le langage de programmation des conditions de dépense. C'est un langage de pile, intentionnellement non-Turing-complet pour la sécurité. Il permet multisig, timelocks, contrats. Tapscript étend ses possibilités avec Taproot.

Origine

Bitcoin Script est le langage de programmation embarqué inventé par Satoshi Nakamoto pour exprimer les conditions de dépense de chaque UTXO. Présent dès le bloc genèse en janvier 2009, c'est un langage minimaliste : pas de variables, pas de boucles, juste une pile et des opcodes. Cette austérité est volontaire : elle garantit que l'exécution termine toujours en temps borné et que la validation est trivialement prouvable.

Comment ça marche

L'évaluation utilise une simple pile (stack) :

  1. Les éléments du scriptSig (ou witness) sont poussés sur la pile.
  2. Le scriptPubKey est exécuté à la suite.
  3. À la fin, la pile doit contenir une valeur "true" pour que la dépense soit valide.

Exemple P2PKH :

scriptSig: <signature> <pubkey>
scriptPubKey: OP_DUP OP_HASH160 <hash> OP_EQUALVERIFY OP_CHECKSIG

L'évaluation duplique la pubkey, la hash, compare au hash attendu, et vérifie la signature contre cette pubkey.

Catégories d'opcodes

| Catégorie | Exemples | |-----------|----------| | Constantes | OP_0, OP_1...OP_16, OP_PUSHDATA | | Flux | OP_IF, OP_ELSE, OP_ENDIF, OP_RETURN | | Stack | OP_DUP, OP_DROP, OP_SWAP | | Bitwise | OP_EQUAL, OP_EQUALVERIFY | | Arithmétique | OP_ADD, OP_SUB, OP_MIN | | Hash | OP_SHA256, OP_HASH160, OP_HASH256 | | Signature | OP_CHECKSIG, OP_CHECKMULTISIG, OP_CHECKSIGADD | | Timelock | OP_CHECKLOCKTIMEVERIFY (CLTV), OP_CHECKSEQUENCEVERIFY (CSV) |

Plusieurs opcodes initialement présents ont été désactivés par Satoshi en 2010 (OP_CAT, OP_MUL, OP_DIV...) suite à des failles de sécurité. Leur réactivation est un sujet de débat actuel.

Pourquoi non-Turing-complet

L'absence de boucles et de récursion garantit qu'aucun script ne peut tourner indéfiniment. Cela élimine d'emblée :

  • Le risque d'attaque par DoS via boucles infinies.
  • Le besoin d'un système de "gas" comme Ethereum.
  • Les bugs de réentrance et autres pièges des langages riches.

Le prix : une expressivité plus limitée, qui exige de la créativité pour implémenter des contrats complexes (HTLC, multisig à seuil, oracles).

Évolutions notables

  • 2012 - BIP-16 : P2SH, hash de redeemScript.
  • 2015 - BIP-65 : OP_CLTV (absolute timelock).
  • 2016 - BIP-112 : OP_CSV (relative timelock).
  • 2017 - BIP-141 : SegWit, séparation du witness.
  • 2021 - BIP-341/342 : Taproot et Tapscript, Schnorr, OP_CHECKSIGADD.

À retenir

Bitcoin Script est l'antithèse délibérée d'Ethereum : un langage minimal, sûr, prévisible. Il monte en complexité par couches (P2SH, SegWit, Taproot/Tapscript), mais ne franchira jamais la frontière du Turing-complet. C'est l'un des choix de design les plus conservateurs et les plus défendus de Bitcoin.

Termes lies

← Retour au glossaire complet

Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.