PSBT

O formato para passar transações para assinatura

Uma PSBT (Partially Signed Bitcoin Transaction — Transação de Bitcoin Parcialmente Assinada) é um formato de dados para passar transações para assinatura.

Esse formato contém os dados de uma transação não assinada, junto com os dados extras necessários para assinar as entradas.

Então, se você exporta uma transação não assinada da sua carteira, ela provavelmente estará no formato PSBT. A maioria das carteiras modernas suporta exportar e assinar PSBTs (Electrum, Sparrow, Trezor, Coldcard).

Ícone Ferramenta

Decodificador de PSBT

Cole uma PSBT (em Base64 ou hex) para ver seus mapas e pares chave-valor (formato BIP 174).

Propósito

Por que precisamos de PSBTs?

Para assinar uma transação de bitcoin, você precisa de algumas informações adicionais que não estão na transação não assinada em si. Por exemplo, para criar uma assinatura que destrava uma entrada P2WPKH, você precisa do ScriptPubKey e do valor da saída que está sendo gasta. Essas informações estão na transação anterior que criou a saída (UTXO), mas não na transação atual.

Isso não é problema com uma carteira conectada à Internet (carteira "quente"), pois essas informações podem ser obtidas da blockchain. Porém, se você usa uma carteira offline para assinar (ex.: um dispositivo de hardware ou carteira "fria"), ela não tem uma cópia atualizada da blockchain — então, mesmo tendo a chave privada, não tem acesso à informação extra necessária para criar a assinatura. Portanto, o formato PSBT permite passar todos os dados necessários para assinar a transação em uma carteira/dispositivo separado.

Benefícios

Por que o formato PSBT foi criado?

Uma PSBT fornece um formato padrão para passar transações para assinatura. Antes das PSBTs, cada carteira implementava o próprio formato, o que significava que ele provavelmente não era compatível com outras carteiras. Com as PSBTs, uma transação não assinada pode ser exportada e assinada por carteiras e dispositivos diferentes.

Por exemplo, você poderia construir uma transação que gasta uma saída multisig (ex.: P2MS) exigindo assinaturas de 3 pessoas diferentes. Usando o formato PSBT, você envia a cada signatário os dados da transação não assinada, e cada um usa a carteira/dispositivo que preferir. As PSBTs separadas podem então ser combinadas para criar a transação final assinada.

Estrutura

Como é uma PSBT?

O formato PSBT é uma série de pares chave-valor contidos em mapas separados.

Cabeçalho

Uma PSBT sempre começa com bytes de cabeçalho para identificar os dados como uma PSBT: os magic bytes 70736274 ('psbt' em ASCII) seguidos de um separador ff de 1 byte.

Ícone Ferramenta ASCII
Ícone Ferramenta

ASCII

Converta entre texto e bytes hexadecimais (codificação ASCII/UTF-8).

0 caracteres 0 bytes

Mapas

Após o cabeçalho, a PSBT contém três tipos de mapa (nesta ordem):

O fim de cada mapa é indicado por um separador 00 de 1 byte.

Chave-Valor

Dentro de cada mapa há uma série de pares chave-valor. Cada par tem: uma Chave (tamanho + tipo + dados, todos compact size/bytes) e um Valor (tamanho + dados). Esses pares se repetem até o fim do mapa.

Uso

Como uma PSBT é usada?

O ciclo de vida de uma PSBT (versão 0) envolve diferentes papéis: o Criador (cria a transação não assinada), o Atualizador (adiciona os dados extras necessários para assinar), o Signatário (adiciona assinaturas), o Combinador (junta PSBTs de vários signatários), o Finalizador (monta os scripts de destravamento finais) e o Extrator (extrai a transação final assinada, pronta para transmitir à rede).

Recursos