Transação
Os dados que destravam e travam lotes de bitcoins
Uma transação de bitcoin é só um monte de dados que destrava e trava lotes de bitcoins.
Mais precisamente, uma transação:
- Seleciona lotes existentes de bitcoins (entradas) e os destrava.
- Cria novos lotes de bitcoins (saídas) e coloca novas travas neles.
Você pode ter várias entradas e saídas em uma única transação. Então você pode pensar em uma transação como parte de uma cadeia de saídas: uma transação cria uma saída, e uma transação futura seleciona essa saída (como entrada) e a destrava para criar novas saídas.
Uma moeda digital contém a chave pública do seu dono. Para transferi-la, o dono assina a moeda junto com a chave pública do próximo dono. Qualquer um pode verificar as assinaturas para confirmar a mudança de propriedade.
Separador de Transação
Construtor de Transação
Estrutura
Como é uma transação bruta de bitcoin?
Uma transação bruta é formada por campos, cada um contendo bytes de dados. Todas as transações têm a mesma estrutura básica, então, para decodificá-las, você só precisa saber o tamanho de cada campo e o formato dos dados:
| Campo | Tamanho | Formato |
|---|---|---|
| Versão | 4 bytes | little-endian |
| Marker & Flag (segwit) | 2 bytes | 0001 |
| Contagem de Entradas | variável | compact size |
| Entrada(s): txid, vout, tam. scriptsig, scriptsig, sequence | variável | — |
| Contagem de Saídas | variável | compact size |
| Saída(s): valor, tam. scriptpubkey, scriptpubkey | variável | — |
| Testemunha (segwit) | variável | — |
| Locktime | 4 bytes | little-endian |
Versão
Os primeiros 4 bytes indicam o número de versão da transação (em little-endian), o que permite atualizar a estrutura das transações no futuro. Atualmente é 01000000 ou 02000000.
Marker & Flag (Opcional)
Em transações segwit, há dois bytes extras após a versão: o marker (00) e o flag (01). O marker 00 indicaria zero entradas em uma transação legada, o que sinaliza aos nós que esta é uma transação segwit com um campo de testemunha no fim.
Compact Size
Little Endian
Exemplos
Como é uma transação bruta?
1. Transação Legada Básica
01000000 <- versão
01 <- contagem de entradas
...txid... ...vout... ...scriptsig... ffffffff
02 <- contagem de saídas
...valor... ...scriptpubkey... (× 2)
00000000 <- locktime
2. Transação SegWit Básica
Igual à legada, mas com o marker & flag (0001) após a versão e um campo de testemunha antes do locktime.
TXID, wTXID, Tamanho e Taxa
A partir dos dados da transação, você pode derivar:
- O TXID — HASH256 dos dados (sem marker/flag/witness), invertido.
- O wTXID — HASH256 de todos os dados (incluindo testemunha), invertido.
- O tamanho — em bytes, unidades de peso e bytes virtuais.
- A taxa — a soma das entradas menos a soma das saídas.