Glossário / Transações e taxas
Transação serializada
Outros nomes: Transação bruta.
- O que é uma transação serializada?
- Uma transação serializada é a sequência de bytes exata que uma carteira entrega à rede, a forma hexadecimal que todo nó analisa, calcula o hash e retransmite sem alterar um único byte.
Especificação no BIP-144.
Tudo o que há de amigável em uma transação, os endereços, os valores na sua moeda local, os rótulos, é decoração que a sua carteira acrescenta. O que de fato viaja é um blob binário compacto, normalmente de 200 a 250 bytes em um pagamento simples, e ele é totalmente autossuficiente. Copie esse hexadecimal de um computador offline para qualquer computador online e o pagamento pode ser transmitido a partir dele.
Como funciona
A serialização é uma ordem fixa sem nomes de campo, então os analisadores dependem inteiramente da posição e dos prefixos de comprimento.
O blob começa com os quatro bytes de versão. As transações com testemunha segregada inserem então dois bytes de sinalização, 0x00 e 0x01, que os analisadores antigos leriam como uma transação com zero entradas e, portanto, rejeitariam, um truque deliberado que permitiu que o novo formato convivesse com o antigo. Em seguida vem a contagem de entradas como um inteiro compactSize, e depois cada entrada: 36 bytes que identificam o bitcoin que está sendo gasto, um script de desbloqueio com prefixo de comprimento e um número de sequência de quatro bytes. A contagem de saídas vem depois, e então cada saída como um valor de oito bytes em satoshis mais um script de bloqueio com prefixo de comprimento. Os dados de testemunha, quando existem, ficam perto do fim, e os últimos quatro bytes são sempre o locktime.
Os números são armazenados em little endian, com o byte menos significativo primeiro, e por isso um valor de 100.000 satoshis aparece no hexadecimal como a0 86 01 00 00 00 00 00. Os hashes são armazenados na ordem interna de bytes, o inverso do que um explorador mostra, então os identificadores de transação dentro de um blob bruto parecem estar ao contrário.
Dois hashes saem dessa única estrutura. O identificador de transação é um SHA-256 duplo sobre a serialização com o marcador, a sinalização e a testemunha removidos, e é isso que torna as assinaturas imunes a alterações posteriores. O identificador de transação de testemunha, definido no BIP141, calcula o hash de tudo, incluindo a testemunha, e os nós o usam para a contabilidade da retransmissão. Um pagamento SegWit nativo de uma entrada e duas saídas é serializado em cerca de 222 bytes brutos e conta como aproximadamente 141 bytes virtuais, porque a parte da testemunha tem desconto.
Onde você o vê
A forma bruta aparece no momento em que você sai de um único aplicativo, o que para a maioria das pessoas significa assinar offline ou resgatar um pagamento.
Carteiras de hardware e configurações isoladas da rede exportam uma transação finalizada como hexadecimal ou como um código QR que contém os mesmos bytes, e você o cola no formulário de transmissão de um explorador de blocos para enviá-la. A linha de comando do Bitcoin Core o usa nos dois sentidos: createrawtransaction e signrawtransactionwithwallet produzem hexadecimal, decoderawtransaction converte o hexadecimal de volta em JSON legível, e sendrawtransaction o coloca na rede. Os pedidos de suporte costumam pedir o hexadecimal bruto em vez do identificador de transação, porque o hexadecimal prova o que a transação contém em vez de apenas nomeá-la.
Uma observação de segurança. Uma transação bruta assinada é informação ao portador: qualquer pessoa que tenha o hexadecimal pode transmiti-la, e nada nela é confidencial. Não cole uma em um fórum público ao pedir ajuda, a menos que você aceite que o pagamento seja feito.
Transação serializada vs identificador de transação
A transação serializada é o documento; o identificador de transação é o nome do arquivo. Uma é algumas centenas de bytes de hexadecimal que podem chegar a quinhentos caracteres na tela, e o outro tem sempre exatamente 64 caracteres hexadecimais.
As pessoas os confundem porque ambos parecem longas sequências de hexadecimal. O teste é o comprimento e o que a sequência pode fazer. Uma sequência de 64 caracteres pode ser consultada em um explorador e nada mais. Uma sequência mais longa pode ser decodificada em campos e, se estiver totalmente assinada, pode ser transmitida por qualquer pessoa que a tenha, incluindo um desconhecido a quem você a enviou.