Miniscript n’est ni un nouvel opcode, ni une règle de consensus, ni un langage généraliste. C’est une couche entre la spending policy humaine et le Bitcoin Script concret, généralement intégrée dans un output descriptor wsh() ou Taproot.
Miniscript structure seulement un sous-ensemble de Bitcoin Script pour signatures, hashlocks, timelocks et combinaisons. Il ne modifie pas consensus et n’ajoute aucun opcode ; le Script produit protège les fonds, Miniscript en est la représentation analysable.
Une spending policy exprime l’intention : « A, ou B après 144 blocs ». Un compiler choisit un Miniscript concret, traduit en Bitcoin Script. Un Output Descriptor relie aussi script, clés, derivation, réseau et checksum, par exemple wsh(...).
pk(), older(), after(), sha256(), and_v(), or_d() et thresh() ont une sémantique précise. Les wrappers comme v: changent type ou comportement sans changer l’intention. Les types B, V, K et W imposent les interfaces de stack pour composer seulement des expressions compatibles.
Une satisfaction est le witness qui rend une branche vraie ; une dissatisfaction est le faux canonique requis pour AND, OR et threshold. Un signer générique choisit selon signatures, preimages et timelocks disponibles. Miniscript ne crée aucune clé privée et ne contourne aucune condition.
after(n) utilise nLockTime absolu, older(n) nSequence relatif selon BIP 68. Locks en hauteur et en temps doivent rester compatibles et les champs de transaction être corrects ; consensus Bitcoin Script, non le texte policy, valide finalement la dépense.
L’analyse statique borne taille du Script et du witness, opérations, signature checks, éléments du stack et coût des chemins de satisfaction. Le résultat dépend du contexte P2WSH ou Tapscript et doit respecter les limites de consensus et standardness.
La correction de type garantit la composition, pas une custody policy judicieuse. L’analyse de malleability vérifie si un tiers peut modifier une satisfaction valide. Les garanties reposent sur des hypothèses telles que l’accès égal aux hash preimages ; les clés dupliquées peuvent être interdites.
Une policy peut produire plusieurs Miniscripts équivalents, de tailles Script et witness différentes. Le compiler optimise un cost model ; les poids comme 9@ indiquent une probabilité, pas une règle de consensus. Une autre compilation produit généralement d’autres adresses.
Dans une descriptor wallet, Miniscript se place dans wsh() ou un Taproot script path avec key origins. PSBT transmet transaction et derivation aux signers, mais l’appareil doit prendre en charge descriptor et policy. Vérifiez clés, threshold, timelocks et branches inattendues à l’écran.
Conservez descriptor avec checksum, key map, derivation paths, réseau, branches receive/change, range et scan birthday. Lancez parser et analyzer, dérivez plusieurs adresses et testez chaque satisfaction prévue sur regtest ou signet. Testez recovery watch-only et signature avant financement. Sources: BIP 379 — Miniscript; Miniscript Reference — Specification and Analyzer; Bitcoin Core — Output Descriptors; Bitcoin Core 24.0 — Miniscript Support; BIP 388 — Wallet Policies for Descriptor Wallets.
Pour une vision complète, lisez aussi Bitcoin Script, Output Descriptor, Multisig, Andrew Poelstra, Timelock, Bitcoin. Cette entrée est également citée par Output Descriptor, Bitcoin Script opcode, Dead Man’s Switch, Andrew Poelstra.