Glossário / Endereços e chaves
Descritor de saída
Outros nomes: Descritor, Output descriptor, Carteira de descritores.
- O que é um descritor de saída?
- Um descritor de saída é uma única linha de texto que declara qual tipo de script, quais chaves e qual ramo de derivação uma carteira deve usar, com uma soma de verificação no fim.
Especificação no BIP-380.
Os descritores existem porque uma chave estendida sozinha é ambígua. A mesma xpub pode produzir endereços legados, SegWit aninhada, SegWit nativa ou Taproot, e só a função que a envolve resolve a questão. O Bitcoin Core cria carteiras de descritores por padrão desde a versão 23.0, lançada em abril de 2022, e um backup de multiassinatura sem seu descritor muitas vezes é irrecuperável.
Como funciona
Um descritor é uma função aplicada a uma expressão de chave, seguida de um sinal de cerquilha e oito caracteres de soma de verificação. A função nomeia o script: pkh para legado, sh(wpkh(...)) para SegWit aninhada, wpkh para SegWit nativa, tr para Taproot e wsh(sortedmulti(2,...)) para um cofre 2-de-3.
A expressão de chave carrega o resto. Os colchetes contêm a origem, ou seja, a impressão digital da chave mestra e o caminho usado para chegar a essa chave, como em [1a2b3c4d/84h/0h/0h]. A chave estendida vem em seguida, depois um sufixo como /0/*, em que o asterisco é um curinga que representa, um a um, cada índice de endereço. Um descritor com curinga é chamado de ranged, e pedir os endereços 0 a 999 a partir dele é uma única chamada RPC em vez de mil importações.
Recebimento e troco são dois descritores, não um, e é por isso que as carteiras os importam em pares terminados em /0/* e /1/. O BIP-389 organizou isso com a notação multipath, escrevendo o par como /<0;1>/ em uma única string.
A soma de verificação é pequena e essencial. O BIP-380 define um código de oito caracteres sobre o texto do descritor, projetado para detectar o tipo de dano que de fato acontece com uma string longa: um caractere trocado, uma colagem truncada, uma quebra de linha inserida por um cliente de e-mail. O Bitcoin Core recusa qualquer descritor cuja soma de verificação não confira, e getdescriptorinfo calcula a correta para uma string que você mesmo digitou.
Onde você o vê
Descritores são o formato de backup para tudo o que seja mais complicado do que uma única frase de recuperação. Sparrow, Nunchuk e Specter exportam um para cada carteira que criam, e uma Coldcard grava o descritor em microSD durante a configuração de multiassinatura, para que o arranjo possa ser reconstruído sem o software coordenador original.
O Bitcoin Core é onde eles se tornaram padrão. A versão 0.17.0, lançada em outubro de 2018, os introduziu para varredura e geração de endereços; importdescriptors e listdescriptors os transformaram na linguagem nativa da carteira; e a carteira de descritores é agora o único tipo que o software cria. Restaurar uma carteira Core a partir de um descritor mais uma nova varredura é um caminho aceito, e que sobrevive à reinstalação do software do zero.
Para uma carteira simples de assinatura única, você normalmente consegue passar sem nunca ver um, porque sua frase de recuperação e o caminho padrão bastam. Para multiassinatura, o descritor é a metade que falta do backup: três frases de recuperação sem registro do tipo de script, da ordem das chaves ou da origem de cada coassinante podem deixar você sem conseguir reconstruir os endereços em que seus bitcoins estão.
Descritor de saída vs chave estendida
Uma chave estendida é um ingrediente e um descritor é a receita. A xpub diz ao software quais chaves existem; o descritor diz o que construir com elas e onde começar a contar. É por isso que importar uma xpub em dois aplicativos diferentes pode produzir duas listas de endereços diferentes, enquanto importar o mesmo descritor não pode. Ambos expõem a mesma privacidade: quem tiver qualquer um dos dois pode enumerar seu ramo, então um descritor merece o mesmo cuidado que a chave dentro dele.