Aller au contenu
buybitcoinsmart

Glossaire / Protocole et mises à jour

Tapscript

Qu'est-ce que Tapscript ?
Tapscript est la version de Bitcoin Script qui s'exécute dans les dépenses par chemin de script de Taproot, avec des signatures Schnorr, aucun plafond d'opcodes et un budget de signatures à la place des anciens compteurs.

Spécifié dans BIP-342.

Le BIP-342 le définit, et l'octet de version de feuille 0xc0 marque une branche d'un taptree comme tapscript plutôt que comme autre chose inventé plus tard. Par rapport au langage de script utilisé partout ailleurs, il supprime la limite de 201 opérations autres que des push et le plafond de taille de script de 10 000 octets, et il désactive OP_CHECKMULTISIG. Si vous dépensez un bitcoin Taproot en révélant un script, c'est dans ce langage que ce script est écrit.

Comment cela fonctionne

Une dépense tapscript remet au réseau trois éléments sur la pile témoin : les arguments que le script demande, le script lui-même, et un bloc de contrôle prouvant que le script appartient à l'adresse.

La vérification des signatures a changé en premier. OP_CHECKSIG et OP_CHECKSIGVERIFY attendent désormais une clé publique x-only de 32 octets et une signature Schnorr de 64 octets, ou 65 octets lorsqu'un type de sighash non par défaut est ajouté. OP_CHECKMULTISIG et OP_CHECKMULTISIGVERIFY échouent d'emblée, et OP_CHECKSIGADD prend leur place.

La comptabilisation des ressources a changé dans un second temps, et c'est la partie qui a de réelles conséquences. Les anciens compteurs, 201 opérations par script et un décompte global de sigops, ont disparu. Chaque entrée reçoit à la place un budget de validation qui commence à 50 unités de poids plus la taille de son propre témoin, et chaque vérification de signature réussie en soustrait 50. Vous achetez du travail de vérification avec des octets, ce qui est une règle plus claire qu'un décompte fixe et signifie qu'un script peut contenir autant de clés que vous êtes prêt à payer.

Deux portes ont été laissées ouvertes pour de futures mises à niveau. Les opcodes 80, 98, 126 à 129, 131 à 134, 137, 138, 141, 142, 149 à 153 et 187 à 254 sont devenus OP_SUCCESS : si l'un d'eux apparaît n'importe où dans le script, même dans une branche qui ne s'exécute jamais, le script réussit immédiatement. Les clés publiques de toute longueur autre que 32 octets sont traitées comme un type de clé inconnu et passent. Les deux règles permettent à un futur soft fork d'attribuer un comportement réel sans hard fork. Ce qui subsiste inchangé est le plafond de 520 octets sur un seul élément de pile et la limite de pile de 1 000 éléments.

Où vous le voyez

Tapscript apparaît chaque fois qu'une sortie Taproot est dépensée de la manière difficile, en révélant une branche au lieu de signer avec la clé agrégée.

L'usage réel le plus lourd est le stockage de données. Une inscription ordinals est une enveloppe tapscript, un bloc de contenu poussé 520 octets à la fois entre OP_FALSE OP_IF et OP_ENDIF, et elle existe sous cette forme précisément parce que tapscript a supprimé la limite de script de 10 000 octets et que la remise sur le témoin s'y applique. Quoi que vous pensiez de cette pratique, c'est la raison pour laquelle la plupart des gens ont vu une dépense tapscript sans le savoir.

Les usages plus proches d'un épargnant sont plus discrets. Les branches de récupération à verrouillage temporel, les solutions de repli de séquestre et les scripts de canal plus récents de Lightning existent tous sous forme de feuilles tapscript, et Bitcoin Core peut les construire et les signer via Miniscript dans un descripteur tr().

Tapscript vs Bitcoin Script

Bitcoin Script est la famille ; tapscript en est un membre. Trois versions de script sont actives sur le réseau en même temps : le langage hérité, le langage de la version SegWit 0, et tapscript, et un nœud choisit entre elles d'après la sortie dépensée, non d'après quoi que ce soit dans le script lui-même.

Cela compte lorsque vous copiez un script depuis un tutoriel. Un deux sur trois écrit avec OP_CHECKMULTISIG est valide dans une sortie P2WSH et invalide dans une feuille de taptree. Un script qui pousse 4 000 octets dépasse la limite de consensus dans un script témoin P2WSH et convient dans tapscript. Mêmes opcodes dans le script, des règles différentes en dessous.

À ne pas confondre avec

Questions fréquentes

Tapscript est-il ce que mon portefeuille utilise lorsque j'envoie depuis une adresse bc1p ?

En général non. La plupart des dépenses Taproot empruntent le chemin de clé, qui nécessite une signature et aucun script du tout. Tapscript ne s'exécute que lorsque le portefeuille révèle une branche du taptree, comme une condition de récupération ou de séquestre.

Pourquoi tapscript a-t-il supprimé la limite de script de 10 000 octets ?

Parce que la limite de poids de bloc borne déjà la quantité de script que quiconque peut publier, et que l'ancien plafond ne faisait que forcer les contrats complexes dans des formes peu commodes. L'effet secondaire a été de rendre pratiques les inscriptions de données volumineuses.

À lire ensuite

Termes associés

Plus de termes : Protocole et mises à jour

Lire cette page en anglais