Pular para o conteúdo
buybitcoinsmart

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.

Não confundir com

Perguntas frequentes

Preciso do Miniscript para uma carteira comum?

Não. Uma carteira de assinatura única e um quórum multiassinatura padrão já são cobertos por modelos de descritor simples. O Miniscript se justifica quando você quer um caminho de recuperação com timelock ou uma política que nenhum modelo descreve.

Uma carteira Miniscript é mais difícil de fazer backup?

Não muito. O backup continua sendo as frases de recuperação mais uma linha de texto do descritor que contém a política, e essa linha não é secreta. Perder o texto da política é tão grave quanto perder um descritor multisig.

Leia a seguir

Termos relacionados

Mais em Protocolo e atualizações

Ler esta página em inglês