Glossaire / Protocole et mises à jour
Miniscript
- Qu'est-ce que Miniscript ?
- Miniscript est une façon structurée d'écrire le sous-ensemble utile de Bitcoin Script pour que le logiciel puisse analyser une politique de dépense, en calculer le coût et signer automatiquement pour elle.
Le Bitcoin Script ordinaire est facile à écrire et presque impossible à appréhender : rien ne vous dit si un script est dépensable, quelle sera la taille de son witness, ni si une branche est morte. Miniscript restreint la grammaire à un ensemble de fragments composables qui portent ces réponses avec eux. Bitcoin Core le comprend dans les descripteurs depuis la version 24.0 et peut signer pour lui depuis la version 25.0.
Comment cela fonctionne
Miniscript est construit à partir de fragments qui correspondent chacun à un motif connu d'opcodes, et de combinateurs qui assemblent les fragments sans briser leurs garanties.
Le vocabulaire est restreint. Les fragments nomment des conditions : pk(clé) pour une signature, older(4320) pour un verrou temporel relatif, after(800000) pour un verrou temporel absolu, sha256(h) pour une préimage de hachage. Les combinateurs nomment la structure : and_v, or_d, thresh et andor couvrent presque tout ce que les gens construisent. Un portefeuille de récupération se lit or_d(pk(clé_quotidienne),and_v(v:pk(clé_de_secours),older(52560))), soit une politique qu'un humain peut vérifier et qu'un compilateur peut transformer en script.
Chaque fragment porte un type et un ensemble de propriétés, et c'est ce système de types qui fait fonctionner l'ensemble. La composition n'est autorisée que là où les propriétés s'accordent, de sorte qu'une politique qui produirait un script que personne ne peut satisfaire, ou qu'un tiers pourrait modifier en cours de route, échoue à la compilation plutôt que d'échouer on-chain avec votre argent dedans.
Comme la structure est connue, trois questions reçoivent des réponses exactes avant que vous ne financiez quoi que ce soit. Quelle est la taille du witness dans le pire des cas, en unités de poids. Quelles combinaisons de clés, de préimages et de temps écoulé peuvent réellement dépenser ceci. Le script tient-il dans les limites, soit 10 000 octets par consensus et un plafond de standardité plus strict de 3 600 octets sur un script witness P2WSH qui décide si les nœuds relaieront votre dépense.
Le dernier élément est la satisfaction. Étant donné un script et le matériel dont dispose un signataire, une implémentation de Miniscript peut construire seule le witness valide le moins coûteux. C'est pourquoi un portefeuille peut prendre en charge des politiques arbitraires sans embarquer de code de signature sur mesure pour chacune.
Où le voir
Miniscript est invisible jusqu'à ce que vous vouliez un portefeuille qui fasse autre chose qu'une clé, une signature.
Bitcoin Core y est parvenu par étapes : la version 24.0 analysait le Miniscript contenu dans les descripteurs P2WSH pour l'observation, et la version 25.0 a ajouté la capacité de signer pour eux, la version qui a rendu les portefeuilles à politique utilisables depuis le client de référence. L'application Bitcoin de Ledger enregistre les politiques via le format de politique de portefeuille défini dans le BIP-388, de sorte qu'un appareil matériel peut afficher et approuver un script qu'il n'a jamais vu auparavant.
Le produit grand public le plus clair est Liana, un portefeuille dont toute la prémisse est une politique Miniscript : dépenser aujourd'hui avec votre clé habituelle, ou après un nombre défini de blocs avec une clé de récupération détenue par quelqu'un d'autre. La planification de succession et les comptes d'entreprise avec un parcours d'approbation progressif ont la même forme.
Si vous détenez un portefeuille à signature unique, rien de tout cela ne vous concerne. Cela commence à compter lorsque vous voulez un chemin de secours qui ne dépende pas de la survie d'une entreprise, et cela compte le plus au moment où un script fait maison serait sinon la seule option.
Miniscript vs descripteur de sortie
Un descripteur dit quelles clés et quel type de script ; Miniscript dit ce que le script fait à l'intérieur. Ce sont des couches, non des alternatives, et elles s'imbriquent : wsh(or_d(pk(A),and_v(v:pk(B),older(52560)))) est un descripteur dont l'expression interne est du Miniscript.
Avant Miniscript, les descripteurs ne pouvaient nommer qu'un menu fixe de modèles tels que wpkh, sortedmulti et tr. Tout ce qui sortait de ce menu imposait de l'hexadécimal écrit à la main et un portefeuille capable de surveiller l'adresse mais jamais de dépenser depuis celle-ci. Miniscript ouvre l'emplacement interne à des politiques arbitraires tout en gardant la somme de contrôle du descripteur, les origines de clés et les chemins de dérivation exactement tels qu'ils étaient, ce qui explique pourquoi une sauvegarde Miniscript reste une seule ligne de texte que vous pouvez imprimer.