Glossaire / Référence pour développeurs
Script témoin
- Qu'est-ce que le script témoin ?
- Le script témoin contient les conditions de dépense réelles d'une sortie P2WSH et voyage dans le témoin, où ses octets sont pondérés au quart du coût habituel.
Spécifié dans BIP-141.
SegWit a donné aux scripts leur propre section de la transaction, et le script témoin est ce qui s'y trouve lorsqu'un coffre bc1q est dépensé. Chaque octet à l'intérieur du témoin compte pour une unité de poids plutôt que quatre, une remise de 75 pour cent arrivée au bloc 481 824 en août 2017. Cette remise explique pourquoi la conservation multisig a cessé d'être coûteuse.
Comment cela fonctionne
Le script témoin est engagé par un simple hachage SHA-256 présent dans la sortie, et il reste secret jusqu'au jour où quelqu'un dépense. Celui qui dépense remplit la pile du témoin avec les arguments exigés par les conditions, puis ajoute le script sérialisé comme dernier élément. Un nœud hache cet élément, vérifie les 32 octets par rapport à l'engagement, et exécute ce qu'il vient de vérifier.
Le consensus applique les mêmes plafonds de script que les dépenses héritées : 10 000 octets de script et 201 instructions de travail. La politique de relais s'arrête bien plus bas, à 3 600 octets avec au plus 100 éléments sur la pile, si bien que tout ce qui est plus grand exige un arrangement direct avec un mineur plutôt qu'une diffusion ordinaire.
C'est l'arithmétique qui a changé les comportements. Un script 2-sur-2 fait 71 octets : deux poussées de clés publiques de 33 octets, les deux opcodes de comptage et l'opcode de vérification. À l'intérieur d'un témoin, ces 71 octets coûtent 71 unités de poids, soit moins de 18 octets virtuels. Les mêmes 71 octets portés à l'ancienne, dans un script de signature, coûtent 284 unités de poids, soit 71 octets virtuels. Rien n'a changé à la sécurité, seulement le prix de son usage.
Où vous le voyez
Lightning fonctionne sur des scripts témoins. Chaque canal est financé dans une sortie 2-sur-2, et les transactions d'engagement à l'intérieur d'un canal sont construites à partir d'une petite bibliothèque de scripts de révocation et de paiements à hash verrouillé spécifiés dans le BOLT 3, ce qui signifie que la plupart sont créés et détruits sans jamais atteindre la chaîne.
Le matériel de signature les voit comme un champ nommé. Le format PSBT définit un emplacement de script témoin sur les entrées comme sur les sorties, de sorte qu'un coordinateur peut remettre à un cosignataire les conditions exactes qui sont satisfaites et que l'appareil peut montrer à l'utilisateur ce qu'il approuve plutôt qu'un hachage.
Vous les voyez aussi enveloppés. Une adresse P2SH-P2WSH imbriquée, courante sur les plateformes d'échange qui n'ont jamais mis à jour leurs écrans de retrait, porte un script de rachat de 34 octets dont le seul rôle est de pointer vers le programme témoin, le script témoin en dessous faisant le vrai travail.
Les sauvegardes ont besoin des octets du script, pas seulement des clés. Conservez le descripteur de sortie avec chaque phrase de récupération, car un script témoin que personne n'a noté par écrit transforme un quorum pleinement signé en bitcoins que personne ne peut déplacer.
Script témoin vs Tapscript
Un script témoin est un script unique qui est révélé en entier ; une feuille tapscript est une branche d'un arbre où seule la branche que vous utilisez est publiée. Selon le BIP-341, une sortie engage une racine de merkle sur de nombreuses feuilles, de sorte qu'un coffre doté de cinq chemins de récupération distincts n'en montre qu'un seul au moment de la dépense et garde les quatre autres privés pour toujours. Tapscript supprime aussi la limite de 10 000 octets, désactive OP_CHECKMULTISIG au profit d'OP_CHECKSIGADD, adapté au traitement par lots, et applique un budget de poids pour les vérifications de signature plutôt qu'un nombre fixe d'instructions. Si votre portefeuille écrit bc1q, vous utilisez des scripts témoins ; bc1p désigne plutôt la conception Taproot.