Aller au contenu
buybitcoinsmart

Glossaire / Référence pour développeurs

Script PP

Qu'est-ce que le script PP ?
Le script PP était le champ obligatoire d'une sortie BIP70 contenant le script de verrouillage brut que le payeur devait reproduire, les mêmes octets que l'on retrouve dans une sortie de transaction.

Spécifié dans BIP-70.

De tout ce que BIP70 mettait sur le réseau, le script est la seule partie qui a survécu sur la blockchain. Les certificats, les notes et les délais d'expiration sont tous restés hors chaîne, tandis que le script de verrouillage est entré dans la transaction mot pour mot et se trouve aujourd'hui dans l'ensemble des sorties non dépensées. Ces octets, et rien d'autre dans la requête, décident qui peut dépenser les bitcoins.

Comment cela fonctionne

Statut : historique. Le script était le champ 2 du message Output et la seule partie de celui-ci qu'un commerçant ne pouvait pas omettre, le montant étant par défaut à zéro. Bitcoin Core a cessé de l'analyser entièrement dans la version 0.20.0, publiée le 3 juin 2020.

Envoyer un script au lieu d'une adresse était un choix délibéré. Une adresse est un format de transport humain : base58check ou bech32, avec un préfixe, une somme de contrôle et un jeu de caractères choisi pour survivre à la transcription et à la lecture à voix haute. Un portefeuille qui en reçoit une doit la décoder en script avant de pouvoir construire quoi que ce soit. BIP70 a évité cet aller-retour et a nommé la destination sous la forme que le réseau utilise réellement.

Les formes standard ont des tailles fixes, et les connaître rend un explorateur de blocs bien plus facile à lire :

  • "Pay to public key hash", 25 octets : dupliquer, hacher, pousser 20 octets, vérifier l'égalité, vérifier la signature.
  • "Pay to script hash", 23 octets : hacher, pousser 20 octets, vérifier l'égalité.
  • Segwit à clé unique, 22 octets : un octet de version zéro et un hash de 20 octets.
  • Segwit script-hash, 34 octets : version zéro et un hash de 32 octets.
  • Taproot, 34 octets : version un et une clé de 32 octets.

Ce que le format abandonnait, c'était la détection d'erreur. Bech32 garantit que quatre caractères substitués dans une adresse allant jusqu'à 89 caractères sont détectés, et base58check détecte une corruption grâce à un hash de quatre octets. Les octets de script brut ne portent ni l'un ni l'autre. Un bit inversé dans une adresse produit une chaîne que votre portefeuille rejette ; un bit inversé dans un script produit une sortie valide que personne ne pourra jamais dépenser.

Où le voit-on

Les types de script sont la raison pour laquelle deux retraits de même taille peuvent coûter des frais différents.

Une plateforme d'échange qui vous laisse choisir un format d'adresse choisit un script pour vous. Une sortie segwit à clé unique occupe 22 octets contre 25 pour la forme héritée, ce qui est négligeable, mais la dépenser plus tard ne l'est pas : cette entrée coûte environ 68 octets virtuels là où une entrée héritée coûte environ 148, donc les bitcoins que vous recevez aujourd'hui fixent une partie de votre facture de frais pour le reste de leur vie. À 20 sat/vB, l'écart est d'environ 1 600 satoshis pour chaque entrée que vous finirez par dépenser.

Les explorateurs nomment le type de chaque sortie qu'ils affichent, ce qui permet de vérifier dans quelle sortie vous avez réellement été payé. Les logiciels plus récents décrivent les destinations avec des descripteurs de sortie, une forme textuelle compacte couvrant toute une famille de scripts et leur dérivation plutôt qu'un script à la fois.

L'habitude à retenir de tout cela est simple. Confirmez la destination sur un appareil doté de son propre écran, car les logiciels malveillants qui remplacent une adresse dans votre presse-papiers sont courants et un portefeuille matériel affichant le vrai destinataire est la vérification qui les détecte.

Script PP vs script de clé publique

Le champ BIP70 était un conteneur ; un script de clé publique est la chose elle-même. Un script de clé publique, aussi appelé scriptPubKey ou script de verrouillage, apparaît dans chaque sortie de transaction jamais créée et énonce la condition qu'la personne qui dépense doit remplir. Le script PP était un endroit particulier où une copie d'un tel script circulait, à l'intérieur d'un protocole que personne n'exécute. Utilisez le nom du champ uniquement lorsque vous lisez la documentation de BIP70, et le nom général partout ailleurs.

À ne pas confondre avec

Questions fréquentes

Pourquoi BIP70 envoyait-il un script plutôt qu'une adresse bitcoin ?

Parce que le script est ce qu'une transaction contient réellement. Une adresse est un encodage de la même destination, entouré d'une somme de contrôle, donc envoyer le script supprimait une étape de décodage, au prix de la perte de la somme de contrôle qui détecte les fautes de frappe.

Le format d'adresse vers lequel vous retirez change-t-il vos frais ?

Oui, surtout lorsque vous dépensez ensuite les bitcoins. Une entrée segwit à clé unique coûte environ 68 octets virtuels contre environ 148 pour une entrée héritée, donc à 20 sat/vB vous économisez environ 1 600 satoshis par entrée.

À lire ensuite

Termes associés

Plus de termes : Référence pour développeurs

Lire cette page en anglais