Glossaire / Référence pour développeurs
Script de rachat
Aussi appelé Redeem script.
- Qu'est-ce qu'un script de rachat ?
- Un script de rachat est le contrat de dépense complet dissimulé derrière une sortie pay-to-script-hash, fourni par celui qui effectue la dépense à la fin du script de signature et haché pour vérifier qu'il correspond.
Spécifié dans BIP-16.
Le BIP-16 a permis à un expéditeur de payer un hash de 20 octets au lieu d'un contrat entier, et le script de rachat est le contrat que ce hash représente. Il doit tenir dans un seul élément de pile, donc 520 octets constituent le plafond absolu. Perdez ces octets et vos clés privées ne valent plus rien, ce qui fait du script de rachat une partie de votre sauvegarde plutôt qu'une partie de votre logiciel.
Comment cela fonctionne
Un script de rachat est invisible tant que les bitcoins ne bougent pas. La sortie qui les détient ne contient qu'un hash et un motif que le consensus reconnaît, appliqué sur l'ensemble du réseau depuis le 1er avril 2012 au bloc 173 805. Aucune des personnes qui vous paient n'apprend quoi que ce soit sur les conditions, et un explorateur de blocs non plus.
Sa révélation a lieu lors de la dépense. Le script de signature pousse les arguments dont le contrat a besoin et se termine par le contrat sérialisé lui-même. Un nœud validateur prend ce dernier élément, le hache, compare le résultat au hash de la sortie, et seulement ensuite désérialise l'élément et l'exécute comme code face à la pile restante. Les deux étapes doivent réussir, et comme le champ qui le transporte ne peut contenir que des poussées, le script lui-même ne peut pas dissimuler un comportement avant d'être vérifié.
Le script de rachat le plus répandu n'est pas un contrat du tout. À partir de 2017, les portefeuilles qui voulaient les économies de SegWit tout en restant payables par un logiciel ancien ont enveloppé un programme témoin dans un hash de script, de sorte que le script de rachat fait 22 octets : un octet de version et un hash de clé de 20 octets, sans rien à exécuter. Des millions d'adresses de retrait de plateformes d'échange commençant par 3 cachent exactement cela et rien de plus.
Où le voir
Bitcoin Core vous en fournit un chaque fois que vous construisez une adresse de script, et sa commande decodescript retransforme l'hexadécimal en assembly lisible. Dans un descripteur, le script est écrit explicitement sous la forme sh(wpkh(...)) ou sh(multi(...)), ce qui est la façon moderne de l'enregistrer, car les portefeuilles à descripteurs sont arrivés dans Bitcoin Core 0.21.0 en janvier 2021 et ont rendu obsolète l'ancienne habitude d'importer des adresses brutes.
Le mode de perte est réel et il est précis. Une phrase de récupération régénère des clés. Elle ne régénère pas un script arbitraire, et elle ne peut pas vous indiquer les clés publiques des autres cosignataires, donc un arrangement 2-sur-3 où chaque participant n'a conservé que sa propre phrase de récupération est impossible à dépenser. Des personnes ont perdu des bitcoins en détenant un jeu complet de clés privées et aucune trace du script dans lequel ces clés étaient agencées. Conservez le descripteur avec chaque sauvegarde de phrase de récupération, et restaurez à partir de lui une fois, sur un petit montant, avant que l'adresse ne contienne quoi que ce soit qui vous manquerait.
L'autre point à connaître est la limite de taille. Quinze clés publiques compressées, plus leurs préfixes de poussée et les opcodes environnants, totalisent 513 octets, ce qui tient tout juste ; une seizième ne tient pas. Ce plafond, plutôt que toute règle sur le multisig, est ce qui limite une adresse de script à quinze cosignataires.
Script de rachat vs script témoin
Un script de rachat et un script témoin occupent la même place conceptuelle à deux époques différentes, et la différence tient à l'endroit où les octets circulent et à la façon dont ils sont engagés. Un script de rachat est engagé avec un hash de 160 bits et voyage dans le script de signature à quatre unités de poids par octet. Un script témoin est engagé avec un SHA-256 complet de 256 bits et voyage dans le témoin à une unité de poids par octet, ce qui explique pourquoi la même politique coûte environ quatre fois moins cher à dépenser. Un arrangement imbriqué utilise les deux à la fois : le script de rachat est le programme témoin de 34 octets et le script témoin est le contrat réel. Si vous enregistrez une sauvegarde pour un multisig SegWit enveloppé, vous avez besoin des deux, pas d'un seul.