Assinar uma transação precisa de informação que o assinante pode não ter: quais moedas estão sendo gastas, seus valores, scripts e caminhos de derivação de chave. Uma Partially Signed Bitcoin Transaction (PSBT), definida no BIP174 por Andrew Chow em 2017, é um recipiente padrão para tudo isso.
O formato
Uma PSBT começa com os bytes mágicos 0x70 0x73 0x62 0x74 0xff («psbt» seguido de 0xff). Tem uma seção global, um mapa por entrada e um por saída, cada um com pares chave–valor tipados. Costuma ser compartilhada como Base64 ou como arquivo binário .psbt.
Entradas podem carregar a transação anterior completa ou o UTXO sendo gasto, o redeem ou witness script, assinaturas parciais, tipos sighash e caminhos de derivação BIP32. Saídas podem carregar caminhos de derivação para que uma carteira de hardware verifique qual saída é o troco.
Os papéis
- Creator: cria a transação não assinada.
- Updater: adiciona dados UTXO, scripts e caminhos de chave.
- Signer: checa os detalhes e adiciona sua assinatura.
- Combiner: mescla PSBTs assinadas por partes diferentes.
- Finalizer: constrói o scriptSig e witness finais.
- Extractor: entrega a transação pronta para transmitir.
Um app pode fazer vários papéis, ou cada um pode ser um dispositivo diferente, como um telefone, um laptop e duas carteiras de hardware.
Por que importa
- Assinatura air-gapped: PSBTs podem se mover por cartão SD ou código QR.
- Multisig: cada coassinante assina de forma independente, depois as assinaturas são combinadas.
- Segurança de taxa: como os valores de entrada estão incluídos, um assinante pode calcular a taxa antes de assinar.
- Coinjoins e payjoins: várias pessoas contribuem com entradas para uma transação.
No Bitcoin Core
RPCs incluem walletcreatefundedpsbt, walletprocesspsbt, combinepsbt, finalizepsbt e decodepsbt.
Versão 2
BIP370 (PSBTv2) deixa entradas e saídas serem adicionadas após a criação, o que ajuda protocolos interativos. Campos Taproot foram adicionados pelo BIP371.
Regra: sempre verifique os endereços e valores na tela do seu dispositivo de assinatura, não só no computador.