PSBT v2 é o formato BIP 370 para trocar uma transação Bitcoin incompleta e informações para assinatura. O número identifica a versão do envelope PSBT, não automaticamente a versão da transação nem um novo método de validação da rede.
PSBT v0, definido no BIP 174, contém uma transação global não assinada. BIP 370 transfere os seus dados de construção para campos separados. Os participantes podem acrescentar entradas e saídas depois de criar o envelope, respeitando as regras. Isso não permite alterar arbitrariamente partes assinadas nem transforma o ficheiro num pagamento. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format]
PSBT_GLOBAL_VERSION deve ser 2 e PSBT_GLOBAL_UNSIGNED_TX deve estar ausente. O campo obrigatório PSBT_GLOBAL_TX_VERSION especifica separadamente a versão da transação; o mapa global inclui ainda as contagens de entradas e saídas. Alterar apenas o número da versão de um ficheiro antigo não cria um PSBT v2 válido. [BIP 370 — PSBT Version 2]
Uma entrada deve identificar o TXID anterior e o índice da saída gasta. Uma saída deve conter o montante em satoshi e o scriptPubKey; a adição também atualiza a contagem global correspondente. Uma sequence de entrada omitida equivale a 0xffffffff. Estes dados não substituem a verificação dos UTXO nem de outras informações necessárias ao dispositivo de assinatura. [BIP 370 — PSBT Version 2]
Em PSBT_GLOBAL_TX_MODIFIABLE, o bit 0 permite alterar entradas e o bit 1 saídas. O bit 2 avisa de uma assinatura SIGHASH_SINGLE: a entrada e a saída devem permanecer emparelhadas no índice correspondente. O construtor deve examinar as assinaturas concretas; um indicador ativo não torna segura uma alteração que seria inválida. [BIP 370 — PSBT Version 2]
Para nLockTime escolhe-se um tipo de requisito compatível com todas as entradas e o seu valor máximo. Se ambos os tipos forem possíveis, a altura de bloco tem prioridade; uma entrada incompatível não é acrescentada. Sem requisitos das entradas, usa-se o valor global de recurso, ou zero. Uma nova entrada não pode alterar nLockTime se já existirem assinaturas. [BIP 370 — PSBT Version 2]
O signatário atualiza os indicadores conforme SIGHASH. Sem SIGHASH_ANYONECANPAY impede alterações de entradas; sem SIGHASH_NONE impede alterações de saídas e com SIGHASH_SINGLE assinala o emparelhamento necessário. Após a finalização, o extrator monta a transação de rede a partir dos campos. A transmissão e a aceitação pela rede são passos adicionais, não propriedades do envelope transferido. [BIP 370 — PSBT Version 2] [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
PSBT v0 e v2 não são diretamente intercambiáveis. Converter para v0 exige construir a transação não assinada e respeitar as regras de campos dessa versão. BIP 371 define separadamente os dados Taproot para ambas. Suportar PSBT ou Taproot não prova, por si só, que uma carteira consegue importar, assinar e exportar PSBT v2. [BIP 370 — PSBT Version 2] [BIP 371 — Taproot Fields for PSBT]
Num dispositivo de confiança, compara destinatários, montantes, a tua saída de troco e a taxa com a intenção original. Verifica os dados UTXO, os scripts e o SIGHASH utilizado; os metadados de derivação de chaves não provam sozinhos a propriedade de uma saída. Um ensaio com o coordenador e dispositivo concretos verifica compatibilidade, não a segurança de todas as transações futuras. [BIP 174 — Partially Signed Bitcoin Transaction Format] [Bitcoin Core — PSBT workflow]
Para ter uma visão mais completa, leia este verbete junto com PSBT, Hardware Wallet, Multisig, Taproot.