PSBT no Bitcoin é um formato para transportar uma transação em preparação, os dados necessários para examiná-la e, conforme o estágio, suas assinaturas. Criar esse pacote não movimenta moedas. Assiná-lo também não o transmite automaticamente: ainda é preciso obter uma transação final e enviá-la à rede. Confirmação em bloco é outra etapa.
Essa separação permite, por exemplo, que um computador conectado prepare a proposta enquanto um dispositivo com as chaves decide se a assina. O arquivo faz a ponte entre funções que não precisam ficar no mesmo equipamento. Ele não é uma moeda, um saldo nem um comprovante de pagamento.
Neste artigo
O que viaja dentro de uma PSBT
A sigla significa Partially Signed Bitcoin Transaction, ou transação Bitcoin parcialmente assinada. O nome não obriga o arquivo a já conter uma assinatura: uma PSBT pode estar no início da preparação ou ter informação suficiente para finalizar a transação.
O BIP 174 especifica o formato original. Além dos dados da transação, o pacote pode carregar informações sobre as saídas anteriores que serão gastas, scripts, chaves públicas, caminhos de derivação e assinaturas parciais. Essas informações ajudam programas diferentes a trabalhar sobre a mesma proposta.
Chaves privadas e frase de recuperação não precisam acompanhar esse percurso. A assinatura é produzida onde a chave está disponível; o resultado pode voltar ao coordenador sem que ele receba a chave. Isso não transforma qualquer coordenador ou arquivo recebido em confiável: o assinador ainda precisa verificar a proposta.
Entradas, destinatário, troco e taxa
Bitcoin não funciona como uma tabela em que cada pagamento simplesmente diminui uma linha de saldo. Uma entrada referencia uma saída anterior ainda não gasta, chamada UTXO. A nova transação consome entradas e cria saídas. Uma delas pode ser o pagamento; outra, o troco que permanece sob controle do remetente.
Considere apenas esta conta hipotética, em satoshis, sem endereços nem movimentação real:
| Componente | Valor |
|---|---|
| Total das entradas | 100.000 sat |
| Saída para o destinatário | 40.000 sat |
| Saída de troco | 59.000 sat |
| Diferença destinada à taxa | 1.000 sat |
A taxa é a diferença entre o total das entradas e o total das saídas. Ela não aparece como uma terceira saída para um endereço de “cobrança da rede”. Conferir apenas os 40.000 sat do destinatário deixaria sem exame o troco e o custo da transação.
Valor absoluto da taxa e taxa por tamanho virtual, normalmente expressa em sat/vB, também são medidas diferentes. Esta conta não estima tempo de confirmação nem indica uma taxa adequada para um momento da rede. Para avaliar a taxa por tamanho, é preciso conhecer ou estimar o tamanho virtual da transação final.
Quem prepara não precisa ser quem assina
O guia de PSBT do Bitcoin Core 30.0 separa os papéis de criação, atualização, assinatura, finalização e extração. Também prevê combinar informações produzidas por participantes diferentes. Uma carteira pode implementar vários desses papéis; eles não representam obrigatoriamente programas ou pessoas separados.
Em uma operação com mais de um assinador, um participante pode contribuir sem concluir todos os requisitos. Combinar assinaturas não significa dispensar a política de gasto. A etapa seguinte depende do que cada entrada exige.
| Estado | O que existe | O que ainda não foi comprovado |
|---|---|---|
| Preparada | Proposta de entradas e saídas, com metadados disponíveis | Aprovação pelos assinadores |
| Parcialmente assinada | Algumas autorizações exigidas | Suficiência para gastar todas as entradas |
| Finalizada e extraída | Transação serializada com os dados finais de gasto | Aceitação por um nó ou transmissão |
| Aceita na mempool de um nó | Transação aceita para aguardar inclusão, segundo o estado e as regras desse nó | Confirmação em bloco |
| Incluída em bloco | Uma confirmação na cadeia observada | Irreversibilidade absoluta |
A última distinção também importa: reorganizações de cadeia são possíveis. A decisão de aceitar um pagamento deve considerar seu contexto, não apenas a existência de uma sequência de caracteres chamada TXID.
O que conferir antes de aprovar a assinatura
O assinador precisa conseguir examinar o destino e o valor, reconhecer o troco e avaliar a taxa com informações suficientes sobre as entradas. Se o dispositivo não consegue mostrar ou verificar algo essencial, isso é uma limitação a resolver, não um convite para aprovar às cegas.
Não compare apenas rótulos apresentados pelo computador que preparou o arquivo. Um nome de contato não substitui a conferência do destino por um canal confiável. Também não trate qualquer saída marcada pelo coordenador como “troco” sem a verificação correspondente pelo assinador.
Há diferentes modos de assinatura, conhecidos como sighash, que definem quais partes da transação ficam comprometidas pela assinatura. Portanto, “assinei o arquivo” não descreve sozinho tudo o que foi autorizado. O BIP 174 prevê verificações pelo assinador e tratamento do tipo de assinatura solicitado; comportamento inesperado deve ser investigado, não contornado para completar o fluxo.
A separação entre equipamento conectado e componente que guarda as chaves aparece em projetos como o Ledger Atom anunciado para 2027. Essa notícia oferece contexto de arquitetura, não demonstra que um produto específico suporta todas as variantes de PSBT nem comprova sua segurança.
O que os comandos do Core comprovam
Os nomes abaixo seguem a documentação da versão 30.0, fixada como referência, não como afirmação de que seja a mais recente. O laboratório apresentado na próxima seção foi executado separadamente com Bitcoin Core 31.0.0.
decodepsbt permite examinar os dados do pacote. Decodificar sem erro comprova que o programa conseguiu interpretar aquele conteúdo; não significa que o pagamento seja desejado ou que todas as informações sejam confiáveis.
finalizepsbt tenta completar os dados finais de gasto. Quando todas as entradas estão finalizadas e a extração é solicitada, o resultado pode incluir a transação em hexadecimal e complete: true. Esse true não quer dizer “pagamento confirmado”. A operação não é o envio à rede.
testmempoolaccept avalia se uma transação seria aceita na mempool, incluindo regras de consenso e política. É uma verificação naquele nó e naquele momento, não uma transmissão nem uma reserva de lugar no próximo bloco. O estado pode mudar antes do envio.
sendrawtransaction submete a transação ao nó e à rede. Um TXID retornado identifica a transação; é preciso observar separadamente sua inclusão em bloco. Além disso, um TXID pode ser calculado sem que tenha havido transmissão: receber apenas esse identificador de outra pessoa não comprova pagamento.
Um laboratório sem dinheiro real para observar a diferença
Executamos o fluxo em 22 de outubro de 2026 com o Bitcoin Core 31.0, em modo regtest: uma cadeia de testes local, com blocos criados sob demanda. O processo rodou em contêiner sem rede externa, com conexões desativadas, diretório temporário e duas carteiras novas. Nenhuma carteira pessoal ou moeda real foi utilizada.
Depois de gerar 101 blocos para disponibilizar moedas de teste, uma carteira preparou o envio de 0,001 BTC fictício para a outra, com uma entrada e duas saídas: destinatário e troco. A taxa do caso foi 282 satoshis. Não é uma recomendação de taxa para a rede Bitcoin.
| Operação observada | Resultado | Transações na mempool local |
|---|---|---|
| Finalizar a PSBT ainda sem assinatura | complete: false |
0 |
| Assinar e finalizar | complete: true, com transação extraída |
0 |
Executar testmempoolaccept |
allowed: true |
0 |
Executar sendrawtransaction |
TXID retornado; zero confirmações | 1 |
| Gerar um novo bloco de teste | Uma confirmação | 0 |
Para reproduzir a sequência, use exclusivamente um nó regtest descartável, sem pares externos e sem carteiras existentes. Com ele iniciado usando -regtest -networkactive=0 -listen=0 e um diretório de dados temporário, estes são os comandos centrais em Bash. jq extrai os campos JSON; D deve apontar para o diretório desse nó de teste:
# Apenas regtest: D e as carteiras pertencem ao laboratorio descartavel.
cli() { bitcoin-cli -regtest -datadir="$D" "$@"; }
cli createwallet sender
cli createwallet recipient
MINER=$(cli -rpcwallet=sender getnewaddress)
DEST=$(cli -rpcwallet=recipient getnewaddress)
cli generatetoaddress 101 "$MINER"
PSBT=$(cli -rpcwallet=sender walletcreatefundedpsbt \
'[]' "[{\"$DEST\":0.001}]" 0 '{"fee_rate":2}' | jq -r .psbt)
cli finalizepsbt "$PSBT" | jq .complete
SIGNED=$(cli -rpcwallet=sender walletprocesspsbt "$PSBT" true | jq -r .psbt)
FINAL=$(cli finalizepsbt "$SIGNED")
printf '%s\n' "$FINAL" | jq .complete
HEX=$(printf '%s\n' "$FINAL" | jq -r .hex)
cli getrawmempool
cli testmempoolaccept "[\"$HEX\"]" | jq '.[0].allowed'
cli getrawmempool
TXID=$(cli sendrawtransaction "$HEX")
cli getrawmempool
cli -rpcwallet=sender gettransaction "$TXID" | jq .confirmations
cli generatetoaddress 1 "$MINER"
cli -rpcwallet=sender gettransaction "$TXID" | jq .confirmations
cli getrawmempool
O teste automatizado executou essas operações por RPC e conferiu cada estado. O trecho Bash mostra a mesma sequência para reprodução; não é uma captura de terminal. Como não havia outros nós conectados, o envio demonstrou submissão à mempool local, não propagação pela internet. Tampouco testamos carteira física, múltiplos assinadores ou compatibilidade entre fabricantes. A evidência é mais estreita: neste caso, preparar, assinar, testar aceitação, submeter e confirmar foram etapas observavelmente distintas.
Arquivo, QR Code ou cartão não eliminam os cuidados
Uma carteira pode usar arquivo, QR Code, USB ou mídia removível para transportar uma PSBT. O meio de transporte não resolve incompatibilidades de formato, scripts suportados ou política do assinador. Tampouco prova isolamento seguro do equipamento.
Existem versões diferentes. O BIP 370 define PSBT versão 2, com uma organização que permite construir a transação por meio dos campos de entradas e saídas, em vez de exigir a transação não assinada global do formato original. Essa versão do contêiner não deve ser confundida com o campo de versão da própria transação Bitcoin. Dois aplicativos que anunciam “suporte a PSBT” ainda precisam ser compatíveis com a variante e o tipo de gasto usados.
O pacote também pode revelar informação financeira. Codificação em Base64 não é criptografia; endereços, valores e dados de derivação podem permitir correlações. Não publique PSBTs reais em fóruns para pedir ajuda sem avaliar o que está expondo. Para aprender o fluxo, prefira um laboratório isolado com moedas sem valor real, preservando a distinção entre demonstração e operação com fundos.
A pergunta certa é qual etapa foi concluída
“A carteira gerou uma PSBT”, “o dispositivo assinou” e “o pagamento confirmou” são três afirmações diferentes. Para acompanhar uma operação, identifique o estado, o que o programa verificou e qual evidência falta: assinatura suficiente, transação extraída, aceitação pelo nó ou inclusão em bloco.
Essa leitura evita tanto a falsa impressão de que criar um arquivo já enviou dinheiro quanto a confiança em um comprovante que só mostra uma proposta. PSBT organiza a colaboração entre ferramentas; a verificação do pagamento continua dependendo do restante do percurso.