Visão geral
Miniscript é uma linguagem para escrever condições de gasto do Bitcoin de forma estruturada e analisável. Desenvolvido principalmente por Pieter Wuille, Andrew Poelstra e Sanket Kanjalkar, o Miniscript fica entre as descrições de política de alto nível e o Bitcoin Script bruto. Torna possível analisar automaticamente scripts quanto à correção, calcular requisitos de assinatura e estimar tamanhos de transação — tarefas extremamente difíceis com Script bruto.
Arquitetura
┌─────────────────────────────────┐
│ Linguagem de Política (alto nív.)│
│ ex., thresh(2, pk(A), │
│ pk(B), pk(C)) │
├─────────────────────────────────┤
│ Miniscript (estruturado) │ ← Análise acontece aqui
│ ex., thresh(2, pk_k(A), │
│ s:pk_k(B), s:pk_k(C)) │
├─────────────────────────────────┤
│ Bitcoin Script (opcodes brutos) │
│ ex., <A> OP_CHECKSIG ... │
└─────────────────────────────────┘
Principais benefícios
- Verificação de correção: Determinar automaticamente se um script é válido, não maleável e seguro por consenso
- Análise de gasto: Determinar todas as formas possíveis de satisfazer um script e quais chaves ou condições são necessárias para cada uma
- Estimativa de taxas: Calcular o tamanho máximo da testemunha, permitindo estimativa precisa de taxas antes de assinar
- Composição: Combinar com segurança múltiplas condições de gasto (ex., timelocks com multisig) sem bugs sutis
Casos de uso
O Miniscript é particularmente valioso para configurações de custódia complexas, como um cofre que requer 2-de-3 assinaturas normalmente, mas permite uma única chave de recuperação após um timelock. Sem o Miniscript, construir e verificar tais scripts exigiria profundo conhecimento em Script e auditoria manual.
Equívocos comuns
O Miniscript não é um substituto para o Bitcoin Script — é um subconjunto estruturado dele. Nem todos os Bitcoin Scripts válidos podem ser expressos como Miniscript, mas todos os Miniscripts compilam para Bitcoin Script válido. Ele se concentra especificamente no subconjunto de scripts úteis para condições de gasto.