Miniscript não é novo opcode, consensus rule nem linguagem de propósito geral. É uma camada entre a spending policy humana e o Bitcoin Script concreto, normalmente dentro de um output descriptor wsh() ou Taproot.
Miniscript estrutura apenas um subconjunto de Bitcoin Script para assinaturas, hashlocks, timelocks e combinações. Não altera consensus nem adiciona opcode; o Script final protege as moedas, enquanto Miniscript é a representação analisável que o software compila ou reconhece.
Uma spending policy expressa a intenção: “A, ou B após 144 blocos”. Um compiler escolhe Miniscript concreto, traduzido em Bitcoin Script. Output Descriptor também liga script, chaves, derivation, rede e checksum, por exemplo wsh(...).
pk(), older(), after(), sha256(), and_v(), or_d() e thresh() têm semântica exata. Wrappers como v: mudam tipo ou comportamento. Os tipos B, V, K e W impõem interfaces do stack para compor somente expressões compatíveis.
Satisfaction é o witness que torna um ramo verdadeiro; dissatisfaction é o falso canônico necessário a AND, OR e threshold. Um signer genérico escolhe caminhos conforme assinaturas, preimages e timelocks. Miniscript não cria private keys nem contorna condição ausente.
after(n) usa nLockTime absoluto e older(n) nSequence relativo segundo BIP 68. Locks por altura e tempo devem ser compatíveis e os campos corretos; no fim, consensus Bitcoin Script, não o texto da policy, valida o gasto.
A análise estática limita tamanho de Script e witness, operações, signature checks, stack elements e custo de cada satisfaction. O resultado depende do contexto P2WSH ou Tapscript e deve cumprir limites de consensus e standardness.
Correção de tipos garante composição segura, não uma custody policy sensata. A análise de malleability pergunta se terceiro pode alterar satisfaction válida. Garantias dependem de premissas como acesso igual a hash preimages; chaves repetidas podem ser proibidas.
Uma policy pode compilar em Miniscripts equivalentes com tamanhos diferentes. O compiler otimiza um cost model; pesos como 9@ são pistas probabilísticas, não consensus rules. Outra compilação normalmente produz outro Script e endereços diferentes.
Em uma descriptor wallet, Miniscript fica em wsh() ou Taproot script path com key origins. PSBT leva transação e derivation aos signers, mas o dispositivo precisa suportar descriptor e policy. Confira chaves, threshold, timelocks e ramos inesperados na tela.
Guarde descriptor exato com checksum, key map, derivation paths, rede, receive/change, range e scan birthday. Rode parser/analyzer, derive vários endereços e teste cada satisfaction em regtest ou signet. Teste watch-only recovery e assinatura antes de financiar. Fontes: 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.
Para ter uma visão mais completa, leia este verbete junto com Bitcoin Script, Output Descriptor, Multisig, Andrew Poelstra, Timelock, Bitcoin. Também há referências a este verbete em Output Descriptor, Bitcoin Script opcode, Dead Man’s Switch, Andrew Poelstra.