132 / 691MINI

Miniscript

Linguagem estruturada para Bitcoin Script

Miniscript é uma representação estruturada e tipada de um subconjunto restrito de Bitcoin Script. Permite compor condições de gasto, analisar propriedades e construir uma satisfaction válida sem lógica específica para cada script.

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.

DOC · 001BIP 379 — MiniscriptEspecificação ↗DOC · 002Miniscript Reference — Specification and AnalyzerEspecificação ↗DOC · 003Bitcoin Core — Output DescriptorsDocumentação ↗DOC · 004Bitcoin Core 24.0 — Miniscript SupportDocumentação ↗DOC · 005BIP 388 — Wallet Policies for Descriptor WalletsEspecificação ↗
Revisado em 1º de agosto de 2026Fontes em primeiro lugar · Não é recomendação de investimento