Glossário / Protocolo e atualizações
Miniscript
- O que é Miniscript?
- Miniscript é uma forma estruturada de escrever o subconjunto útil do Script do Bitcoin para que o software possa analisar uma política de gasto, calcular seus custos e assinar por ela automaticamente.
O Script simples do Bitcoin é fácil de escrever e quase impossível de analisar: nada informa se um script pode ser gasto, qual será o tamanho de seu witness ou se um ramo está morto. O Miniscript restringe a gramática a um conjunto de fragmentos combináveis que carregam essas respostas consigo. O Bitcoin Core o entende em descritores desde a versão 24.0 e pode assinar por ele desde a versão 25.0.
Como funciona
O Miniscript é construído a partir de fragmentos que se mapeiam cada um em um padrão conhecido de opcodes, e de combinadores que colam fragmentos sem quebrar suas garantias.
O vocabulário é pequeno. Os fragmentos nomeiam condições: pk(key) para uma assinatura, older(4320) para um timelock relativo, after(800000) para um absoluto, sha256(h) para uma pré-imagem de hash. Os combinadores nomeiam a estrutura: and_v, or_d, thresh e andor cobrem quase tudo o que qualquer pessoa constrói. Uma carteira de recuperação se lê or_d(pk(daily_key),and_v(v:pk(backup_key),older(52560))), que é uma política que um humano pode conferir e um compilador pode transformar em script.
Cada fragmento carrega um tipo e um conjunto de propriedades, e o sistema de tipos é o que faz tudo funcionar. A composição só é permitida onde as propriedades se alinham, então uma política que produziria um script que ninguém pode satisfazer, ou um que um terceiro poderia alterar em trânsito, não chega a compilar, em vez de falhar on-chain com seu dinheiro dentro dele.
Como a estrutura é conhecida, três perguntas têm respostas exatas antes de você depositar qualquer valor. Qual é o tamanho do witness no pior caso, em unidades de peso. Quais combinações de chaves, pré-imagens e tempo decorrido podem de fato gastar isso. O script cabe dentro dos limites, ou seja, 10.000 bytes por consenso e um teto mais rígido de 3.600 bytes de padronização para um script de witness P2WSH, que decide se os nós vão sequer retransmitir seu gasto.
A última peça é a satisfação. Dado um script e o material que um assinante tem, uma implementação de Miniscript pode construir por conta própria o witness válido mais barato. É por isso que uma carteira pode aceitar políticas arbitrárias sem incluir código de assinatura sob medida para cada uma.
Onde você o vê
O Miniscript é invisível até você querer uma carteira que faça algo diferente de uma chave, uma assinatura.
O Bitcoin Core chegou a ele por etapas: a versão 24.0 interpretava Miniscript dentro de descritores P2WSH para observação, e a versão 25.0 acrescentou a capacidade de assinar por eles, que é a versão que tornou as carteiras de políticas utilizáveis a partir do cliente de referência. O aplicativo Bitcoin da Ledger registra políticas por meio do formato de política de carteira definido no BIP-388, então um dispositivo de hardware pode exibir e aprovar um script que nunca viu antes.
O produto de consumo mais claro é a Liana, uma carteira cuja premissa inteira é uma política de Miniscript: gastar hoje com sua chave normal, ou após um número determinado de blocos com uma chave de recuperação em poder de outra pessoa. O planejamento de herança e as contas de empresa com um caminho de aprovação escalonado têm a mesma forma.
Se você tem uma carteira de assinatura única, nada disso o afeta. Isso começa a importar quando você quer um caminho de backup que não dependa de uma empresa continuar funcionando, e importa mais no ponto em que um script caseiro seria, de outra forma, a única opção.
Miniscript vs descritor de saída
Um descritor diz quais chaves e qual tipo de script; o Miniscript diz o que o script faz por dentro. São camadas, não alternativas, e se aninham: wsh(or_d(pk(A),and_v(v:pk(B),older(52560)))) é um descritor cuja expressão interna é Miniscript.
Antes do Miniscript, os descritores só podiam nomear um menu fixo de modelos como wpkh, sortedmulti e tr. Qualquer coisa fora desse menu significava hexadecimal escrito à mão e uma carteira que podia observar o endereço, mas nunca gastar a partir dele. O Miniscript abre o espaço interno para políticas arbitrárias e mantém o checksum do descritor, as origens das chaves e os caminhos de derivação exatamente como estavam, e é por isso que um backup de Miniscript continua sendo uma única linha de texto que você pode imprimir.