# Construção Manual de Transações Bitcoin
Vou explicar detalhadamente como montar transações Bitcoin manualmente, abordando diferentes tipos de transações e fornecendo exemplos com valores hexadecimais.
## Estrutura Básica de uma Transação
Uma transação Bitcoin é composta por:
1. **Version** (4 bytes)
2. **Marker & Flag** (opcional, apenas para transações SegWit)
3. **Input Count** (1-9 bytes, VarInt)
4. **Inputs** (estrutura variável)
5. **Output Count** (1-9 bytes, VarInt)
6. **Outputs** (estrutura variável)
7. **Witnesses** (opcional, apenas para transações SegWit)
8. **Locktime** (4 bytes)
## Exemplo de Transação Legada (P2PKH)
Vamos construir uma transação passo a passo:
```
Version: 01000000 (versão 1)
Input Count: 01 (1 input)
Input:
- Txid: 7967a5185e907a25225574544c31f7b059c1a191d65b53dcc1554d339c4f9efc
- Vout: 01000000 (índice 1)
- ScriptSig length: 6a (106 bytes)
- ScriptSig: 47304402206a2eb16b7b92051d0fa38c133e67684ed064effada1d7f925c842da401d4f22702201f196b10e6e4b4a9fff948e5c5d71ec5da53e90529c8dbd122bff2b1d21dc8a90121039b7bcd0824b9a9164f7ba098408e63e5b7e3cf90835cceb19868f54f8961a825
- Sequence: ffffffff (finalized)
Output Count: 01 (1 output)
Output:
- Value: 00e1f50500000000 (1 BTC = 100,000,000 satoshis)
- ScriptPubKey length: 19 (25 bytes)
- ScriptPubKey: 76a9144ab4ee161c7a0d8d768439ab1a7647d37f2ffe3988ac (P2PKH para endereço 1BCyxfGTrkkqmHGg63z7kXvt2TCr4m8AoP)
Locktime: 00000000 (sem locktime)
```
## Evolução dos Tipos de Transação Bitcoin
### 1. P2PKH (Pay to Public Key Hash) - Original
Formato do ScriptPubKey:
```
OP_DUP OP_HASH160
```
Exemplo: `76a9144ab4ee161c7a0d8d768439ab1a7647d37f2ffe3988ac`
### 2. P2SH (Pay to Script Hash) - BIP16, 2012
Formato do ScriptPubKey:
```
OP_HASH160
```
Exemplo: `a914f4c03f9e0a7667acbf893bcc99e9c5a3e6f7f6d087`
### 3. P2WPKH (Pay to Witness Public Key Hash) - BIP141, 2017
Formato do ScriptPubKey:
```
OP_0 <20-byte-key-hash>
```
Exemplo: `0014751e76e8199196d454941c45d1b3a323f1433bd6`
### 4. P2WSH (Pay to Witness Script Hash) - BIP141, 2017
Formato do ScriptPubKey:
```
OP_0 <32-byte-script-hash>
```
Exemplo: `00201863143c14c5166804bd19203356da136c985678cd4d27a1b8c6329604903262`
### 5. P2TR (Pay to Taproot) - BIP341, 2021
Formato do ScriptPubKey:
```
OP_1 <32-byte-schnorr-pubkey>
```
Exemplo: `5120a37c3903c8d0db6512e2b40b0dfbfc9213f4b673aeb58d1679364295b2c4e28`
## Montando uma Transação P2WPKH
Vamos construir uma transação SegWit P2WPKH passo a passo:
```
Version: 01000000 (versão 1)
Marker: 00 (indica transação SegWit)
Flag: 01 (obrigatório com o marker)
Input Count: 01 (1 input)
Input:
- Txid: 2d4a13bdfedcda173c35e61586ea21030bd1da2b010f00163c9417ee7384abd4
- Vout: 01000000 (índice 1)
- ScriptSig length: 00 (vazio para SegWit)
- ScriptSig: (vazio)
- Sequence: ffffffff
Output Count: 02 (2 outputs)
Output 1:
- Value: 00ca9a3b00000000 (10 BTC)
- ScriptPubKey length: 16 (22 bytes)
- ScriptPubKey: 0014d85c2b71d0060b09c9886aeb815e50991dda124d (P2WPKH)
Output 2:
- Value: 009435770000000 (1.5 BTC - troco)
- ScriptPubKey length: 16 (22 bytes)
- ScriptPubKey: 00146a59ac0e8f553f292dfe5e9f3aaa1da93499c15e (P2WPKH - endereço de troco)
Witness count: 01 (para 1 input)
Witness items for input 0:
- Item count: 02 (assinatura + chave pública)
- Item 1 length: 47 (71 bytes)
- Item 1: 3044022074ef696e55a0cc2f4d80fe833095b2a59c5bb9417ee5a3ba905994d228e6f33c02204ab291e35f37d3ed5ddf024170615f1e1d8d6118e3d6c5ecce33b01d72316fb901 (assinatura)
- Item 2 length: 21 (33 bytes)
- Item 2: 0283ef77a9821f95f8fd1b93bed127b398989ee19bd598d77859a5962e4fa0f047 (chave pública)
Locktime: 00000000 (sem locktime)
```
## Processo de Assinatura
O processo de assinatura varia conforme o tipo de transação. Vamos explicar para o P2WPKH:
1. **Criar o preimage da transação**:
- Version: 01000000
- Hash de outputs anteriores: d4ab8473ee17943c16000f012bdad10b0321ea8615e6353c17dadcfedd3ba1d4
- Hash de sequências anteriores: ffffffff
- Txid do input: 2d4a13bdfedcda173c35e61586ea21030bd1da2b010f00163c9417ee7384abd4
- Vout: 01000000
- Script do output sendo gasto: 1976a914d85c2b71d0060b09c9886aeb815e50991dda124d88ac
- Valor do input: e8030000000000000 (1000 satoshis)
- Sequence: ffffffff
- Hash de outputs: (hash de todos os outputs)
- Locktime: 00000000
- SigHash: 01000000 (SIGHASH_ALL)
2. **Calcular o hash SHA256 duplo do preimage**
3. **Assinar o hash com a chave privada**
4. **Construir a testemunha (witness) com a assinatura e a chave pública**
## Diferenças na Construção de Diferentes Tipos de Transação
1. **P2PKH**:
- ScriptSig contém `
- Sem campo witness
2. **P2SH**:
- ScriptSig contém `
- Sem campo witness
3. **P2WPKH**:
- ScriptSig vazio
- Witness contém `
- Usa marker (00) e flag (01)
4. **P2WSH**:
- ScriptSig vazio
- Witness contém `
- Usa marker (00) e flag (01)
5. **P2TR (Taproot)**:
- ScriptSig vazio
- Para gasto via chave: witness contém `
- Para gasto via script: witness contém `