Um Output Descriptor é uma descrição em texto das chaves e regras que uma carteira deve usar para construir saídas Bitcoin: registros de valores e das condições para gastar os fundos depois. Ele ajuda a recriar os endereços corretos e reconhecer seus pagamentos. Não é uma transação nem um backup completo, e pode conter apenas dados públicos ou também chaves secretas.
Ana está trocando o aplicativo que usa para acompanhar sua carteira de hardware. Ela quer continuar acompanhando seus fundos no novo aplicativo sem digitar as palavras de recuperação no computador. As palavras de recuperação, chamadas Seed Phrase, são um backup que permite recuperar as chaves da carteira. Um descriptor público informa ao novo aplicativo quais chaves públicas usar e como gerar os mesmos endereços. Pense nele como instruções precisas para construir endereços, não como mais uma senha. Em uma carteira comum, o programa muitas vezes reconhece sozinho a configuração padrão. Mas uma configuração incomum ou Multisig (uma configuração de carteira com várias chaves de assinatura) não pode depender de adivinhações. O descriptor não transfere dinheiro nem altera pagamentos já recebidos. Ele descreve as regras que a recuperação precisa preservar. [1] [8]
Uma chave privada permite criar uma assinatura digital que autoriza um gasto. Uma chave pública permite verificar essa assinatura, mas não criá-la. Um descriptor público pode conter um xpub: dados que permitem derivar outras chaves públicas, mas não assinar pagamentos. Isso serve para uma Watch-only Wallet, que acompanha pagamentos sem conseguir enviá-los por conta própria. Mesmo assim, essa exportação merece proteção de privacidade: ela pode relacionar muitos dos seus endereços e seus históricos. Outro descriptor pode conter um xprv, uma chave privada estendida, ou WIF, uma forma de representar uma chave privada individual. Nesse caso, são dados secretos que podem permitir gastos conforme as condições aplicáveis. Não os envie a um verificador on-line nem os guarde como uma anotação inofensiva. A configuração pública não substitui os backups necessários para assinar. [1] [8]
Depois de importar, Ana compara vários endereços de recebimento com os da carteira original. Com uma carteira de hardware, ela verifica os endereços na tela confiável do dispositivo, seguindo o procedimento do fabricante. Também confere a configuração do ramo de troco, por onde volta a parte não gasta ao fazer um pagamento. Ter o mesmo nome de conta não basta. Antes de confiar no novo backup, ela testa o procedimento completo de recuperação da sua carteira sem expor chaves secretas desnecessariamente. Se o aplicativo não aceita o descriptor ou mostra endereços diferentes, primeiro é preciso verificar compatibilidade, rede e configurações. Reescrever uma expressão desconhecida por intuição não é uma correção segura. [5] [8]
Em uma carteira que exige duas assinaturas de três chaves, não basta ter dois conjuntos de palavras de recuperação e lembrar que ‘era dois de três’. Para recriar as condições corretas, são necessários os dados públicos das três chaves, suas regras de derivação e o tipo exato de script. Um script define as condições que devem ser cumpridas para gastar os fundos. Na notação técnica multi(k,...), vale a ordem de chaves indicada; k é a quantidade exigida de assinaturas. A variante sortedmulti(k,...) ordena as chaves públicas derivadas pelos seus bytes ao construir cada script. São regras diferentes, não nomes intercambiáveis. Guarde, portanto, a exportação completa da configuração, além dos backups das chaves necessárias para assinar protegidos separadamente. Uma lista de nomes dos dispositivos não basta. [2] [8]
Depois do caractere # podem aparecer oito caracteres chamados checksum, a soma de verificação definida no BIP380. O programa a usa para detectar muitos erros de cópia. Ela não é uma assinatura do autor, criptografia ou prova de que o descriptor pertence a você. Quem substitui as chaves de propósito também consegue calcular um novo checksum correto. Por isso, conferir o texto deve acompanhar a verificação dos endereços e da origem da configuração. Se o aplicativo apontar um erro de checksum, primeiro obtenha novamente a exportação original. Apenas gerar outro checksum poderia fazer a verificação aceitar um texto já danificado. [1]
Uma chave pode ser precedida por [fingerprint/path], a informação de origem conhecida como key origin. O fingerprint é um identificador curto da chave inicial; path é o caminho pelo qual se derivou a chave escrita depois. Isso ajuda o dispositivo de assinatura a localizar a chave correta. Após o xpub pode haver outro caminho para derivar endereços individuais. Essas duas partes têm funções diferentes; não são apenas um rótulo de conta. Chaves diferentes podem, por coincidência, ter o mesmo fingerprint, então ele não autentica um dispositivo. Uma exportação pública também não pode continuar livremente por Hardened Derivation, uma etapa que exige dados privados. O aplicativo exportador precisa escolher o nível de chave adequado. [1]
O asterisco em /* significa substituir números sucessivos, como 0, 1 e 2. Esse ranged descriptor descreve mais de um endereço; em cada operação, o programa escolhe o intervalo de índices a processar. A notação <0;1> do BIP389 pode abranger dois ramos, normalmente recebimento e troco, se o aplicativo a aceitar. Porém, o descriptor não mantém por si só uma lista de endereços usados nem registra o próximo número livre. O gap limit, a quantidade de endereços consecutivos nunca usados após a qual a busca para, também não faz parte automaticamente da expressão. Nunca usado significa sem histórico de transações: um endereço que recebeu fundos depois gastos não conta como nunca usado. A recuperação pode, portanto, exigir o estado da carteira e uma busca em um intervalo suficientemente amplo. [5] [6] [9]
Uma saída de transação contém um scriptPubKey, o script que estabelece as condições para gastá-la depois. O descriptor informa como construí-lo. A expressão wpkh(KEY) descreve Native SegWit com uma chave; KEY aqui é um marcador, não uma chave real. Envolvê-la em sh(wpkh(KEY)) muda o formato da saída e o endereço, mesmo mantendo a chave. Outras expressões incluem pk(), pkh(), wsh(), addr() e raw(). Elas não são opções intercambiáveis: por exemplo, addr() descreve um endereço conhecido, mas não fornece dados ausentes necessários para gastar seus fundos. Esta seção é uma referência de configuração, não uma exigência de que iniciantes escrevam descriptors à mão. [1] [8]
Uma saída Taproot pode ser gasta por uma assinatura de chave ou pelas condições de scripts anexadas, se a saída as incluir. A notação tr(KEY) especifica uma chave interna sem um ramo de script utilizável para gasto; tr(KEY,TREE) acrescenta uma árvore de scripts. Portanto, há mais a preservar do que uma lista de chaves. A forma de agrupar os scripts na árvore importa: mudá-la pode alterar o hash conjunto, a Merkle root, e o endereço resultante, mesmo que as condições individuais permaneçam iguais. Nem toda troca de ramos causa essa mudança, porém. Miniscript ajuda a descrever e analisar condições, enquanto multi_a expressa múltiplas assinaturas em Tapscript, a linguagem de scripts do Taproot. Nenhum deles substitui sozinho a exportação completa da configuração. [3] [8]
RPC é uma interface para enviar comandos ao software a partir de outro programa ou da linha de comando. No Bitcoin Core 29, o comando RPC getdescriptorinfo analisa a expressão. Ele devolve uma forma pública sem chaves privadas, além de checksum, isrange, issolvable e hasprivatekeys. O último campo informa se a entrada continha uma chave privada; issolvable não significa que você tem as chaves secretas necessárias para assinar. O comando deriveaddresses permite comparar os endereços derivados. Na importação, importdescriptors também recebe timestamp, active, internal, range e next_index: o início da busca pelo histórico, se a configuração está ativa, se corresponde ao troco interno, o intervalo e o próximo índice de endereço. Um rescan é uma nova busca por transações na cadeia. Um timestamp tardio demais pode deixar pagamentos antigos de fora; alterar somente o descriptor não os move nem os apaga. Depois da importação, é necessário um novo backup da carteira. Esses comandos devem ser usados na sua própria instalação confiável, não no formulário de um site alheio. [5] [7] [8]
Para ter uma visão mais completa, leia este verbete junto com Carteira, Watch-only Wallet, Multisig, PSBT, Miniscript, Bitcoin. Também há referências a este verbete em Watch-only Wallet, Extended Public Key (xpub), PSBT, Autocustódia.