Visão geral
Uma transação bruta é a representação em nível de bytes de uma transação Bitcoin, tipicamente exibida como uma string hexadecimal. Ela contém todas as informações que um nó precisa para validar e retransmitir a transação: a versão, as entradas (referenciando saídas anteriores sendo gastas), as saídas (definindo novas condições de bloqueio), os dados de testemunha (para transações SegWit) e o locktime. Trabalhar com transações brutas dá aos desenvolvedores controle completo sobre a construção de transações.
Estrutura da transação bruta
Layout de Transação Serializada:
┌──────────┬───────────┬───────────┬──────────┬──────────┐
│ Versão │ Contagem │ Contagem │Testemunha│ Locktime │
│ (4 bytes)│ Entradas │ Saídas + │ (apenas │ (4 bytes)│
│ │ + Entradas│ Saídas │ SegWit) │ │
└──────────┴───────────┴───────────┴──────────┴──────────┘
Cada Entrada: Cada Saída:
┌─────────────────────┐ ┌──────────────────────┐
│ ID TX Anterior │ │ Valor (satoshis) │
│ (32 bytes) │ │ (8 bytes) │
├─────────────────────┤ ├──────────────────────┤
│ Índice de Saída │ │ Comprimento do Script│
│ (4 bytes) │ │ (varint) │
├─────────────────────┤ ├──────────────────────┤
│ Comprimento ScriptSig│ │ ScriptPubKey │
│ + ScriptSig │ │ (script de bloqueio) │
├─────────────────────┤ └──────────────────────┘
│ Sequência │
│ (4 bytes) │
└─────────────────────┘
Trabalhando com transações brutas via RPC
A interface RPC do Bitcoin Core fornece comandos para cada estágio do manuseio de transações brutas:
createrawtransaction— Construir uma transação não assinada especificando entradas e saídasdecoderawtransaction— Inspecionar uma transação codificada em hex em JSON legível por humanossignrawtransactionwithwallet— Assinar a transação com chaves da carteirasendrawtransaction— Transmitir a transação assinada para a rede
Casos de uso
- Assinatura offline — Construir transações em uma máquina online, assinar em um dispositivo com isolamento de ar e transmitir a partir da máquina online
- Scripts personalizados — Construir transações com scripts de bloqueio não padrão para testes ou protocolos avançados
- Controle de taxas — Definir manualmente entradas e saídas para gerenciamento preciso de taxas
- Análise de transações — Decodificar e inspecionar transações existentes para depuração ou propósitos forenses
PSBT como alternativa
Para a maioria dos fluxos de trabalho de assinatura em múltiplas etapas, os PSBTs (BIP174) são agora preferidos em relação às transações brutas. Os PSBTs carregam metadados adicionais (informações UTXO, caminhos de derivação, assinaturas parciais) que as transações hexadecimais brutas não possuem, tornando-os mais seguros e portáteis para fluxos de trabalho com carteiras de hardware e multisig.
Conceito errôneo comum
Uma transação bruta não é "bruta" no sentido de estar incompleta ou não processada. Uma transação bruta totalmente assinada é uma transação Bitcoin válida e completa, pronta para transmissão. O termo "bruta" simplesmente se refere ao formato binário serializado em contraste com uma representação JSON legível por humanos.