Pular para o conteúdo
buybitcoinsmart

Glossário / Transações e taxas

PSBT

Outros nomes: Partially Signed Bitcoin Transaction, BIP174.

O que é um PSBT?
Um PSBT é um arquivo de transação que ainda não está pronto: ele carrega as entradas, as saídas e tudo o que um assinante precisa para verificá-las, e circula entre dispositivos em vez de pela rede.

Especificação no BIP-174.

Assinar bitcoin costumava significar entregar suas chaves privadas a qualquer programa que montasse a transação. O BIP174 separou essas duas coisas em 2018 e o Bitcoin Core passou a oferecer suporte na versão 0.17.0, de modo que o dispositivo que guarda as chaves pode ser diferente do dispositivo conectado à internet. Hoje toda carteira de hardware e todo coordenador de multiassinatura fala esse formato.

Como funciona

Um PSBT é um contêiner de mapas de chave-valor: um mapa global que descreve a transação sendo montada, depois um mapa para cada entrada e um para cada saída.

O arquivo começa com cinco bytes mágicos, 70 73 62 74 ff, que formam "psbt" mais um separador. O Base64 é a forma usual de transportá-lo, então um PSBT colado em uma caixa de texto sempre começa com os caracteres cHNidP8. Uma string que comece de qualquer outra forma não é um PSBT, diga o que disser quem a enviou.

Cada mapa de entrada contém as informações que um assinante offline não pode consultar por conta própria:

  • a saída sendo gasta, para que o dispositivo saiba o valor exato e o script de bloqueio que está autorizando
  • o script de resgate ou o script de testemunha, quando a saída está protegida por uma política e não por uma única chave
  • um caminho de derivação e a impressão digital da chave mestra para cada chave que precisa assinar, para que um dispositivo com a frase de recuperação correta encontre a chave filha correta
  • as assinaturas parciais reunidas até o momento, uma por assinante

Os mapas de saída também carregam informações de derivação, e é isso que permite a um assinante confirmar que a saída de troco realmente pertence à carteira que ele está protegendo.

O BIP174 divide o trabalho em papéis, não em programas. Um criador produz o esqueleto, um atualizador preenche os detalhes das entradas, os assinantes acrescentam assinaturas parciais, um combinador une os arquivos assinados de forma independente, um finalizador converte as assinaturas parciais em um script ou testemunha válidos, e um extrator produz a transação bruta pronta para ser transmitida. Um mesmo software costuma desempenhar vários papéis ao mesmo tempo, mas é essa separação que faz com que arquivos de fornecedores diferentes sejam interoperáveis.

O formato foi criado para tolerar o desconhecimento. Cada campo carrega um byte de tipo, e um assinante que não entende um campo deve deixá-lo passar intacto em vez de descartá-lo, e é assim que uma carteira escrita em 2018 ainda pode entregar um arquivo a outra escrita para Taproot. O BIP371 acrescentou os campos de Taproot; o BIP370 define uma versão 2 na qual entradas e saídas ainda podem ser adicionadas depois da criação, a propriedade de que as transações colaborativas precisam.

Por que isso importa quando você compra bitcoin

No momento em que você tira bitcoins de uma corretora para a sua própria carteira de hardware, você está usando o formato PSBT, independentemente de alguma tela dizer isso.

Ele mantém as chaves fora do seu computador. Seu notebook monta o gasto e produz um PSBT, a Trezor ou a Ledger o lê, mostra o que ele diz, assina e o devolve. Nada secreto passa pelo cabo. Essa é a diferença entre um notebook comprometido, que é superável, e uma frase de recuperação comprometida, que não é.

Ele defende contra a troca do endereço de troco. Um malware que controla seu computador pode exibir uma tela de pagamento honesta enquanto desvia silenciosamente o troco para um endereço que ele próprio controla, e o troco costuma ser o valor maior. Como o arquivo indica um caminho de derivação para cada saída, o dispositivo de assinatura pode verificar que o troco descende da própria frase de recuperação dele e avisar você quando isso não acontece. Leia a tela do dispositivo, nunca a aba do navegador.

Ele torna a multiassinatura viável para quem não é engenheiro. Um 2 de 3 distribuído entre duas carteiras de hardware e um backup em outro prédio só funciona se uma transação não assinada puder viajar por cartão SD, código QR ou e-mail sem vazar nada. Um PSBT não contém chaves privadas, então perder um em trânsito não custa absolutamente nada.

É a peça de que seus herdeiros vão precisar. Um envelope de palavras de recuperação não é um plano de recuperação para nada mais complicado que uma carteira de chave única. Junte às frases de recuperação o descritor de saída da carteira e uma nota nomeando um software que leia PSBTs, e o plano sobreviverá a você. Nosso guia de segurança cobre o resto dessa configuração.

Assinar um saque 2 de 3, passo a passo

Digamos que você compre 0,4 BTC em uma corretora e os saque para um cofre controlado por três chaves, das quais quaisquer duas podem gastar.

Meses depois você quer mover parte deles. Uma carteira somente leitura no seu notebook, carregada com o descritor do cofre e sem nenhuma chave, monta a transação: uma entrada, uma saída de pagamento e uma saída de troco. Uma entrada segwit nativa 2 de 3 ocupa cerca de 105 bytes virtuais e as duas saídas cerca de 62 a mais, então com a sobrecarga o total fica perto de 177 bytes virtuais, e a 8 sat/vB a taxa fica em aproximadamente 1.400 satoshis.

O notebook escreve um PSBT. Você conecta a primeira carteira de hardware, que lê o arquivo, exibe o destinatário, o valor e a taxa, e escreve uma assinatura no mapa da entrada. Depois você leva o arquivo em um cartão microSD até o segundo dispositivo, que nunca tocou uma rede, e ele acrescenta a segunda assinatura.

De volta ao notebook, o combinador une os dois arquivos, o finalizador monta as assinaturas em uma testemunha na ordem que o script espera, e o extrator produz uma transação bruta. Só então algo chega à rede. Até esse momento nenhuma chave saiu de um dispositivo, e nada do que você fez foi visível para ninguém.

PSBT vs transação serializada

Uma transação serializada está pronta; um PSBT é um espaço de trabalho. Transmita um PSBT e todos os nós o rejeitam, porque esse não é um formato que o protocolo ponto a ponto carrega. A diferença também corre no outro sentido: um PSBT carrega contexto que uma transação pronta descarta, como o valor de cada entrada sendo gasta e de qual chave cada endereço foi derivado, que é justamente a informação de que uma carteira de hardware precisa e um bloco não.

PSBT vs descritor de saída

Um descritor de saída descreve uma carteira; um PSBT descreve um gasto. O descritor é uma única linha que nomeia o tipo de script, as chaves e os caminhos de derivação, e não muda de um ano para o outro. Os PSBTs são descartáveis, um por transação. Em uma carteira de chave única, a frase de recuperação sozinha recupera tudo, mas na multiassinatura você precisa dos dois: o descritor para descobrir quais endereços são seus, e os PSBTs para tirar qualquer coisa deles.

Não confundir com

Perguntas frequentes

É seguro enviar um PSBT por e-mail ou fazer o upload dele?

Ele não contém chaves privadas, então ninguém pode gastar seus bitcoins com ele. Mas revela com quais endereços e valores você está trabalhando, então trate-o como um vazamento de privacidade, e não como um risco de roubo, e prefira um cartão SD ou um código QR quando isso importar.

Preciso saber o que é um PSBT para usar uma carteira de hardware?

Não. A Sparrow, a Electrum, o Bitcoin Core e os aplicativos dos fabricantes criam e finalizam tudo para você. Conhecer o formato ajuda quando uma assinatura não combina, quando duas carteiras discordam sobre um arquivo ou quando você está planejando uma configuração de multiassinatura.

Por que minha carteira de hardware pede que eu confirme uma saída de troco?

Porque o PSBT informa a ela a qual caminho de derivação cada saída pertence, assim ela pode provar que o troco está voltando para a sua própria frase de recuperação. Se o dispositivo não consegue verificar isso, ele marca a saída como um destinatário desconhecido, e você deve parar e verificar.

Qual é a diferença entre a versão 1 e a versão 2 do PSBT?

A versão 1, definida no BIP174, fixa o conjunto de entradas e saídas no momento da criação. A versão 2, definida no BIP370, permite que os participantes adicionem entradas e saídas depois, de que transações colaborativas como coinjoins e payjoins precisam.

Leia a seguir

Termos relacionados

Mais em Transações e taxas

Ler esta página em inglês