# 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 OP_EQUALVERIFY OP_CHECKSIG

```

Exemplo: `76a9144ab4ee161c7a0d8d768439ab1a7647d37f2ffe3988ac`

### 2. P2SH (Pay to Script Hash) - BIP16, 2012

Formato do ScriptPubKey:

```

OP_HASH160 OP_EQUAL

```

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 `