Policy (Miniscript)
Une policy Miniscript est la description haut niveau des règles d'un script (sans souci de l'ordre des opcodes). Le compilateur Miniscript la traduit en scriptPubKey optimal. Outil pédagogique avant tout. Utile pour concevoir des scripts complexes.
Définition
Une policy Miniscript est une expression haut niveau qui décrit les conditions logiques de dépense d'une UTXO Bitcoin, sans se soucier de la traduction en opcodes Bitcoin Script. Elle se lit comme une formule booléenne : « il faut signer avec la clé X et attendre 6 mois, ou bien trois sur cinq cosignataires ». Le compilateur Miniscript transforme cette policy en scriptPubKey optimal prêt à être déployé.
Pourquoi un niveau supplémentaire ?
Écrire directement du Bitcoin Script est :
- difficile à relire
- sensible aux ordres des opcodes
- piégeux pour la satisfiability (les conditions doivent être réalisables)
- coûteux en frais si mal optimisé
Miniscript, inventé par Pieter Wuille, Andrew Poelstra et Sanket Kanjalkar (2019), est un sous-ensemble strict de Bitcoin Script avec des garanties d'analyse statique. La policy est l'étage encore plus haut : un DSL exclusivement déclaratif.
Syntaxe de base
Quelques constructeurs courants :
| Policy | Signification |
|--------|---------------|
| pk(K) | Signature de la clé K |
| and(a, b) | a ET b (les deux requis) |
| or(a, b) | a OU b (l'un des deux) |
| thresh(k, a, b, c, ...) | k éléments sur n requis |
| older(t) | Attendre t blocs (relative timelock) |
| after(t) | Attendre la date/hauteur t (absolute timelock) |
Exemples concrets
Multisig 2-of-3 simple
thresh(2, pk(Alice), pk(Bob), pk(Charlie))
Recovery vault
or(
and(pk(Owner), older(0)),
and(thresh(2, pk(Recovery1), pk(Recovery2)), older(52596)) // 1 an
)
Le propriétaire peut dépenser instantanément ; la récupération nécessite 2 sur 3 et 1 an de timelock.
Inheritance plan
or(
pk(Vous),
and(thresh(2, pk(Heritier1), pk(Heritier2), pk(Notaire)), after(2027-01-01))
)
Le compilateur
À partir de la policy, le compilateur Miniscript produit :
- Un arbre Miniscript valide.
- Le scriptPubKey en opcodes Bitcoin Script.
- Des estimations : taille, poids, satisfiability.
- Plusieurs branches si plusieurs chemins de dépense.
Pour Taproot, le compilateur peut aussi produire un arbre MAST optimal, plaçant les chemins fréquents en haut (moins coûteux) et les chemins rares plus profond.
Outils
- rust-miniscript : référence implémentation, intégrée à BDK.
- Bitcoin Core : support partiel via descriptors.
- Liana wallet : éditeur graphique de policies.
- Minsc / Bitcoin Policy : outils web pour expérimenter.
Cas d'usage
- Vaults sophistiqués avec timelocks et cooldowns.
- Héritage programmé : transferts automatiques après inactivité.
- Trésoreries d'entreprise : conditions multi-acteurs.
- Lightning : conditions HTLC et anchor outputs.
- DLCs : adapter signatures sur résultats d'oracle.
Avantages
| Avantage | Bénéfice | |----------|---------| | Lisibilité | Code auditable par non-experts | | Optimisation auto | Frais minimaux | | Garantie satisfiability | Pas de fonds bloqués par bug | | Compatible PSBT | Workflow multisig fluide | | Portabilité | Compilable sur Bitcoin et Liquid |
Limites
- Toutes les policies ne sont pas traduisibles en Miniscript (certaines combinaisons n'ont pas d'expression compacte).
- Le résultat dépend de l'estimation des probabilités des branches : mauvais paramètres = scripts sous-optimaux.
- Support hardware wallet encore limité (s'améliore en 2024-2025).
À retenir
La policy Miniscript transforme la programmation Bitcoin en une activité accessible : on décrit le quoi, le compilateur s'occupe du comment. C'est la couche d'abstraction qui manquait pour que les scripts complexes deviennent un outil quotidien, pas un piège pour experts.
Termes lies
- MiniscriptMiniscript est une représentation de Bitcoin Script lisible et composable. Permet d'écrire des politiques complexes (multisig avec timelock, etc.) sûrement. Implémenté par Liana, Bitcoin Core, BDK. Démocratise les scripts avancés.
- Script (Bitcoin Script)Bitcoin Script est le langage de programmation des conditions de dépense. C'est un langage de pile, intentionnellement non-Turing-complet pour la sécurité. Il permet multisig, timelocks, contrats. Tapscript étend ses possibilités avec Taproot.
Glossaire inspire du dictionnaire de Loic Morel sur Pandul.fr.