Como Funciona uma Transação Bitcoin?
Introdução
Você já se perguntou o que acontece por trás dos panos quando envia Bitcoin para alguém? Como a rede sabe que você tem Bitcoin suficiente? Como ela verifica que a transação é válida? Como os mineradores decidem quais transações incluir em um bloco?
Este guia vai explicar como funcionam as transações Bitcoin de forma técnica, mas ainda acessível. Você vai entender conceitos como inputs, outputs, UTXOs, assinaturas digitais e taxas. Nosso objetivo é ensinar você a entender transações na prática, não apenas na teoria.
Vamos usar exemplos reais com valores fictícios para ilustrar cada conceito. Ao final deste guia, você será capaz de ler uma transação Bitcoin no blockchain explorer e entender exatamente o que está acontecendo.
Conceitos Fundamentais
O Que é uma Transação Bitcoin?
Uma transação Bitcoin é uma transferência de valor na blockchain que move Bitcoins de um ou mais endereços de origem para um ou mais endereços de destino.
Diferente de sistemas bancários tradicionais, Bitcoin não usa "contas" com saldos. Em vez disso, usa um sistema de moedas não gastas (UTXOs) que são transferidas de uma pessoa para outra.
Características principais:
- Transações são atômicas (ou completam totalmente ou falham completamente)
- Não podem ser modificadas depois de confirmadas
- São públicas e verificáveis por qualquer um
- São irreversíveis (uma vez confirmadas)
UTXO: Moedas Não Gastas
UTXO (Unspent Transaction Output) são "moedas" Bitcoin que foram recebidas em uma transação anterior mas ainda não foram gastas.
Pense em UTXOs como notas físicas de dinheiro:
- Quando alguém te paga, você recebe uma ou mais "notas" (UTXOs)
- Cada nota tem um valor específico
- Para pagar alguém, você precisa "dar" uma ou mais notas
- Você pode precisar dar uma nota grande e receber troco
Exemplo prático:
- João tem 0.5 BTC (recebido em uma transação anterior)
- Maria tem 0.3 BTC (recebido em outra transação)
- Pedro tem 1.2 BTC (recebido em outra transação)
Cada um desses valores é um UTXO diferente. Quando Pedro quer enviar 0.8 BTC para Ana, ele precisa usar seu UTXO de 1.2 BTC e criar dois outputs: 0.8 BTC para Ana e 0.4 BTC de troco para ele mesmo.
Inputs e Outputs
Inputs são referências a UTXOs anteriores que estão sendo "gastos" na transação. Outputs são novos UTXOs sendo criados na transação.
Estrutura básica:
Transação Bitcoin
├── Inputs (entradas - UTXOs sendo gastos)
│ ├── Input 1: referência a transação anterior + valor
│ └── Input 2: referência a transação anterior + valor
├── Outputs (saídas - novos UTXOs sendo criados)
│ ├── Output 1: endereço destino + valor
│ └── Output 2: endereço de troco + valor
└── Taxa: diferença entre inputs e outputs
Anatomia de uma Transação Bitcoin
Componentes de uma Transação
1. Version (Versão):
- Número de versão do protocolo
- Indica quais regras a transação segue
2. Inputs:
- Lista de UTXOs sendo gastos
- Cada input referencia uma transação anterior
- Inclui script de desbloqueio (assinatura)
3. Outputs:
- Lista de novos UTXOs sendo criados
- Cada output especifica endereço e valor
- Inclui script de bloqueio (condições para gastar)
4. Locktime:
- Timestamp ou número de bloco
- Transação só é válida após esse tempo/bloco
- Geralmente é 0 (válida imediatamente)
Exemplo Prático: Transação Simples
Vamos seguir uma transação do início ao fim com valores fictícios:
Situação inicial:
- Ana tem 0.5 BTC recebido na transação ABC123 (UTXO)
- Ana quer enviar 0.3 BTC para Carlos
- Taxa de rede: 0.0001 BTC
Transação criada:
Transação XYZ789
├── Input
│ └── Input 1:
│ ├── Referência: ABC123, output 0 (0.5 BTC)
│ └── Assinatura: [assinatura de Ana]
├── Outputs
│ ├── Output 0: Endereço de Carlos (0.3 BTC)
│ └── Output 1: Endereço de Ana (0.1999 BTC - troco)
└── Taxa: 0.0001 BTC (0.5 - 0.3 - 0.1999)
O que acontece:
- Ana usa seu UTXO de 0.5 BTC (input)
- Cria output de 0.3 BTC para Carlos
- Cria output de 0.1999 BTC de troco para ela mesma
- Taxa de 0.1 mBTC (0.0001 BTC) é paga aos mineradores
- Total: 0.5 BTC (input) = 0.3 BTC + 0.1999 BTC + 0.0001 BTC (outputs + taxa)
Após confirmação:
- UTXO de 0.5 BTC de Ana é marcado como "gasto"
- Novo UTXO de 0.3 BTC é criado para Carlos (pode ser gasto)
- Novo UTXO de 0.1999 BTC é criado para Ana como troco
Inputs (Entradas)
O Que São Inputs?
Inputs são referências a outputs de transações anteriores que estão sendo gastos na transação atual.
Cada input contém:
- Hash da transação anterior: Identifica qual transação contém o UTXO
- Índice do output: Qual output daquela transação está sendo usado
- Script de desbloqueio: Assinatura e chave pública que provam propriedade
Estrutura de um Input
Input {
previous_output: {
hash: "abc123...", // Hash da transação anterior
index: 0 // Qual output usar (0 = primeiro)
},
script_sig: "[assinatura]", // Script de desbloqueio
sequence: 0xffffffff // Usado para replace-by-fee
}
Exemplo de Input Múltiplo
Situação:
- Maria quer enviar 0.8 BTC para João
- Maria tem dois UTXOs:
- UTXO 1: 0.5 BTC da transação DEF456
- UTXO 2: 0.4 BTC da transação GHI789
Transação criada:
Transação JKL012
├── Inputs
│ ├── Input 1:
│ │ ├── Referência: DEF456, output 0 (0.5 BTC)
│ │ └── Assinatura: [assinatura de Maria]
│ └── Input 2:
│ ├── Referência: GHI789, output 0 (0.4 BTC)
│ └── Assinatura: [assinatura de Maria]
├── Outputs
│ ├── Output 0: Endereço de João (0.8 BTC)
│ └── Output 1: Endereço de Maria (0.0999 BTC - troco)
└── Taxa: 0.0001 BTC
Total de inputs: 0.5 + 0.4 = 0.9 BTC Total de outputs: 0.8 + 0.0999 = 0.8999 BTC Taxa: 0.9 - 0.8999 = 0.0001 BTC
Script de Desbloqueio (ScriptSig)
ScriptSig é o script que "desbloqueia" o UTXO, provando que você tem direito de gastá-lo.
Tipos mais comuns:
1. Pay-to-PubKeyHash (P2PKH):
- Formato tradicional
- Requer assinatura e chave pública
- Script:
<assinatura> <chave pública>
2. Pay-to-ScriptHash (P2SH):
- Para endereços que começam com "3"
- Permite scripts mais complexos
- Requer script de resgate e dados
3. Pay-to-Witness-PubKeyHash (P2WPKH):
- Para endereços SegWit (bc1...)
- Assinatura fica separada (witness data)
- Menor custo de taxa
Outputs (Saídas)
O Que São Outputs?
Outputs são novos UTXOs sendo criados na transação. Eles especificam para onde o Bitcoin deve ir e em que quantidade.
Cada output contém:
- Valor: Quantidade de Bitcoin (em satoshis)
- Script de bloqueio: Condições que devem ser atendidas para gastar esse output
Estrutura de um Output
Output {
value: 30000000, // 0.3 BTC em satoshis
script_pubkey: "[script]" // Script de bloqueio
}
Tipos de Outputs
1. Pay-to-PubKeyHash (P2PKH):
- Endereços que começam com "1"
- Script:
OP_DUP OP_HASH160 <hash da chave pública> OP_EQUALVERIFY OP_CHECKSIG
2. Pay-to-ScriptHash (P2SH):
- Endereços que começam com "3"
- Script:
OP_HASH160 <hash do script> OP_EQUAL
3. Pay-to-Witness-PubKeyHash (P2WPKH):
- Endereços SegWit que começam com "bc1"
- Script:
OP_0 <hash da chave pública> - Mais eficiente (menores taxas)
Exemplo: Transação com Múltiplos Outputs
Situação:
- Pedro quer enviar Bitcoin para 3 pessoas:
- 0.2 BTC para Alice
- 0.15 BTC para Bob
- 0.1 BTC para Charlie
- Pedro tem 0.5 BTC em um UTXO
Transação criada:
Transação MNO345
├── Input
│ └── Input 1: UTXO de 0.5 BTC de Pedro
├── Outputs
│ ├── Output 0: Endereço de Alice (0.2 BTC)
│ ├── Output 1: Endereço de Bob (0.15 BTC)
│ ├── Output 2: Endereço de Charlie (0.1 BTC)
│ └── Output 3: Endereço de Pedro (0.0499 BTC - troco)
└── Taxa: 0.0001 BTC
Validação:
- Input: 0.5 BTC
- Outputs: 0.2 + 0.15 + 0.1 + 0.0499 = 0.4999 BTC
- Taxa: 0.0001 BTC
- Total: 0.5 BTC ✓
UTXO: Sistema de Moedas Não Gastas
Como UTXOs Funcionam
Sistema UTXO é diferente de sistema de contas:
Sistema de Contas (Bancos):
- Você tem uma conta com saldo: 1.0 BTC
- Para enviar 0.3 BTC, saldo diminui para 0.7 BTC
- Simples e intuitivo
Sistema UTXO (Bitcoin):
- Você tem UTXOs separados: [0.5 BTC, 0.3 BTC, 0.2 BTC]
- Para enviar 0.3 BTC, você usa um UTXO ou combina vários
- Mais complexo, mas mais flexível
Exemplo: Rastreamento de UTXOs
Histórico de transações:
Transação 1 (bloco 100):
- Alice recebe 1.0 BTC de uma transação anterior
- Cria UTXO: Alice tem 1.0 BTC (UTXO A)
Transação 2 (bloco 150):
- Alice envia 0.4 BTC para Bob
- Usa UTXO A (1.0 BTC) como input
- Cria outputs:
- Bob recebe 0.4 BTC (UTXO B)
- Alice recebe 0.5999 BTC de troco (UTXO C)
- UTXO A é marcado como gasto
Transação 3 (bloco 200):
- Alice envia 0.2 BTC para Carlos
- Usa UTXO C (0.5999 BTC) como input
- Cria outputs:
- Carlos recebe 0.2 BTC (UTXO D)
- Alice recebe 0.3998 BTC de troco (UTXO E)
- UTXO C é marcado como gasto
Estado atual:
- UTXOs não gastos:
- UTXO B: Bob tem 0.4 BTC
- UTXO D: Carlos tem 0.2 BTC
- UTXO E: Alice tem 0.3998 BTC
UTXOs e Privacidade
Cada UTXO pode ser rastreado:
- Blockchain é pública
- UTXOs podem ser conectados
- Análise de cluster pode identificar relacionamentos
Boas práticas para privacidade:
- Use novos endereços para cada recebimento
- Não reutilize endereços
- Considere usar CoinJoin para misturar UTXOs
- Separe UTXOs de diferentes origens
Assinaturas Digitais
Como Assinaturas Funcionam
Assinatura digital prova que você tem a chave privada que controla o UTXO, sem revelar a chave privada.
Processo:
- Você cria transação
- Hash da transação é criado
- Você assina o hash com sua chave privada
- Assinatura é incluída no input
- Rede verifica assinatura usando chave pública
ECDSA: Algoritmo de Assinatura
Bitcoin usa ECDSA (Elliptic Curve Digital Signature Algorithm):
- Curva elíptica: secp256k1
- Gera par de chaves (privada e pública)
- Assinatura é um par de números (r, s)
Características:
- Assinatura é determinística (mesma chave + mesma mensagem = mesma assinatura)
- Mas Bitcoin usa nonce aleatório para segurança
- Assinatura é única e não pode ser falsificada
Processo de Assinatura
Passo a passo:
-
Criar transação:
- Definir inputs e outputs
- Calcular taxas
- Criar estrutura da transação
-
Criar hash para assinar:
- Hash da transação (menos scripts de desbloqueio)
- Inclui inputs, outputs, locktime
-
Assinar com chave privada:
- Usar ECDSA para assinar hash
- Gerar par (r, s)
-
Incluir assinatura no input:
- Adicionar script de desbloqueio
- Incluir assinatura e chave pública
-
Broadcast para rede:
- Enviar transação para nós Bitcoin
- Nós verificam e propagam
Verificação de Assinatura
A rede verifica se assinatura é válida:
- Extrai assinatura do input
- Extrai chave pública do input
- Recria hash que foi assinado
- Verifica se assinatura corresponde ao hash e chave pública
- Se válido, transação pode prosseguir
Se assinatura for inválida:
- Transação é rejeitada
- Nunca entra na mempool
- Não será incluída em bloco
Exemplo: Assinatura na Prática
Transação a ser assinada:
- Ana quer enviar 0.5 BTC para Carlos
- Usa UTXO de 1.0 BTC
Processo:
- Carteira de Ana cria estrutura da transação
- Hash da transação é calculado:
hash123... - Carteira assina
hash123...com chave privada de Ana - Assinatura gerada:
(r=abc..., s=def...) - Input inclui:
- Referência ao UTXO
- ScriptSig com assinatura e chave pública de Ana
Verificação:
- Nós Bitcoin extraem assinatura e chave pública
- Recriam hash da transação
- Verificam se assinatura é válida
- Se válido, transação é aceita
Taxas de Transação
Como Taxas Funcionam
Taxa de transação é a diferença entre o valor total dos inputs e o valor total dos outputs.
Taxa = Soma de todos os inputs - Soma de todos os outputs
Por que existe:
- Incentiva mineradores a incluir transação no bloco
- Evita spam na rede
- Prioriza transações importantes
Cálculo de Taxa
Taxa não é explicitamente definida:
- Você não diz "quero pagar 0.0001 BTC de taxa"
- Em vez disso, você define valores dos outputs
- Taxa é o que "sobra"
Exemplo:
- Input: 1.0 BTC
- Output para destinatário: 0.999 BTC
- Taxa implícita: 1.0 - 0.999 = 0.001 BTC (1 mBTC)
Taxa por Tamanho (sat/vB)
Taxa é baseada no tamanho da transação em bytes, não no valor transferido.
Fatores que afetam tamanho:
- Número de inputs (mais inputs = maior transação)
- Número de outputs (mais outputs = maior transação)
- Tipo de script (SegWit = menor)
- Comprimento de assinaturas
Taxa expressa em:
- sat/vB (satoshis por byte virtual)
- Quanto maior sat/vB, mais rápida a confirmação
Exemplo: Cálculo de Taxa
Transação simples:
- 1 input (P2PKH tradicional)
- 2 outputs (destinatário + troco)
- Tamanho: ~250 bytes
- Taxa escolhida: 10 sat/vB
Cálculo:
- Taxa total: 250 bytes × 10 sat/vB = 2,500 satoshis
- Taxa em BTC: 0.000025 BTC
Transação complexa:
- 5 inputs (P2PKH tradicional)
- 3 outputs
- Tamanho: ~1,250 bytes
- Taxa escolhida: 15 sat/vB
Cálculo:
- Taxa total: 1,250 bytes × 15 sat/vB = 18,750 satoshis
- Taxa em BTC: 0.0001875 BTC
Observe: Mesma taxa por byte, mas transação maior paga mais total.
Otimização de Taxas
Como reduzir taxas:
1. Use SegWit:
- Endereços que começam com "bc1"
- Assinaturas separadas (witness data)
- Transações menores = taxas menores
- Pode economizar 30-40%
2. Combine UTXOs:
- Menos inputs geralmente = transação menor
- Mas cuidado: muitos UTXOs pequenos podem ser caros para gastar
- Equilibre número de UTXOs
3. Evite outputs muito pequenos:
- Outputs pequenos aumentam tamanho da transação
- Considere enviar valores maiores de uma vez
4. Escolha horários de baixo tráfego:
- Fins de semana podem ter taxas menores
- Horários de pico têm taxas maiores
Mempool e Taxas
Mempool é a "fila" de transações esperando confirmação:
Como funciona:
- Transações são enviadas para mempool
- Mineradores escolhem quais incluir no próximo bloco
- Geralmente priorizam transações com maior taxa (sat/vB)
- Transações com taxa muito baixa podem esperar muito tempo
Estratégias:
- Taxa alta: Confirma em ~10 minutos
- Taxa média: Confirma em 1-3 horas
- Taxa baixa: Pode esperar horas ou dias
Durante congestionamento:
- Muitas transações competindo
- Taxas aumentam
- Transações de baixa taxa podem ficar "presas"
Exemplo Completo: Rastreando uma Transação
Vamos seguir uma transação completa do início ao fim:
Situação Inicial
Estado dos UTXOs:
- Roberto tem:
- UTXO 1: 0.8 BTC (da transação ABC123)
- UTXO 2: 0.5 BTC (da transação DEF456)
- Total de Roberto: 1.3 BTC
Transação a Ser Criada
Objetivo: Roberto quer enviar 1.0 BTC para Juliana
Desafio: Nenhum UTXO individual tem 1.0 BTC, então precisa combinar
Criação da Transação
Carteira de Roberto cria transação:
Transação GHI789
├── Version: 2
├── Inputs
│ ├── Input 0:
│ │ ├── previous_output: {
│ │ │ hash: "abc123...",
│ │ │ index: 0
│ │ │ },
│ │ └── script_sig: "[assinatura de Roberto para UTXO 1]"
│ └── Input 1:
│ ├── previous_output: {
│ │ hash: "def456...",
│ │ index: 0
│ │ },
│ └── script_sig: "[assinatura de Roberto para UTXO 2]"
├── Outputs
│ ├── Output 0:
│ │ ├── value: 100000000 (1.0 BTC em satoshis)
│ │ └── script_pubkey: "[endereço de Juliana]"
│ └── Output 1:
│ ├── value: 29999000 (0.29999 BTC em satoshis - troco)
│ └── script_pubkey: "[endereço de Roberto]"
├── Locktime: 0
└── Taxa implícita: 0.00001 BTC (1.3 - 1.0 - 0.29999)
Validação da Transação
Nós Bitcoin verificam:
-
Verificar inputs:
- UTXO 1 existe? ✓
- UTXO 2 existe? ✓
- Já foram gastos? ✗ (não, estão disponíveis)
-
Verificar assinaturas:
- Assinatura do Input 0 é válida? ✓
- Assinatura do Input 1 é válida? ✓
- Roberto controla ambos UTXOs? ✓
-
Verificar valores:
- Inputs totais: 0.8 + 0.5 = 1.3 BTC ✓
- Outputs totais: 1.0 + 0.29999 = 1.29999 BTC ✓
- Taxa: 1.3 - 1.29999 = 0.00001 BTC ✓
- Taxa > 0? ✓
-
Verificar scripts:
- Scripts de bloqueio válidos? ✓
- Scripts de desbloqueio corretos? ✓
Resultado: Transação válida! ✓
Broadcast e Mempool
Transação é enviada para rede:
- Roberto envia transação GHI789 para nós próximos
- Nós verificam (como acima)
- Se válida, propagam para outros nós
- Transação entra no mempool
- Mineradores veem transação
No mempool:
- Taxa: 0.00001 BTC
- Tamanho: ~500 bytes
- Taxa por byte: ~20 sat/vB
- Prioridade: Média-Alta (dependendo do congestionamento)
Mineração e Confirmação
Minerador escolhe incluir transação:
- Minerador vê transação no mempool
- Taxa é aceitável (20 sat/vB)
- Inclui em bloco que está minerando
Bloco é minerado:
- Bloco #800.000 contém transação GHI789
- Bloco é adicionado à blockchain
- Transação recebe primeira confirmação
Estado Após Confirmação
UTXOs antigos:
- UTXO 1 (0.8 BTC) de Roberto: ❌ GASTO
- UTXO 2 (0.5 BTC) de Roberto: ❌ GASTO
Novos UTXOs criados:
- UTXO 3 (1.0 BTC) para Juliana: ✅ DISPONÍVEL
- UTXO 4 (0.29999 BTC) para Roberto (troco): ✅ DISPONÍVEL
Saldo atualizado:
- Roberto: 0.29999 BTC (troco)
- Juliana: 1.0 BTC (recebido)
Lendo Transações no Blockchain Explorer
O Que Procurar
Ao ver uma transação no explorer:
1. ID/Hash da Transação:
- Identificador único
- Exemplo:
abc123def456...
2. Inputs:
- Quantos UTXOs estão sendo gastos
- Valor de cada input
- Endereços de origem
3. Outputs:
- Quantos novos UTXOs estão sendo criados
- Valor de cada output
- Endereços de destino
4. Taxa:
- Total pago em taxa
- Taxa por byte (se mostrado)
5. Confirmações:
- Quantos blocos desde a transação
- Mais confirmações = mais seguro
Exemplo: Interpretando uma Transação
Transação no explorer:
Transação: 7a8b9c1d2e3f...
Status: Confirmada (6 confirmações)
Inputs:
├── 0.5 BTC de 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
└── 0.3 BTC de 1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2
Outputs:
├── 0.7 BTC para 1C4hvzGJdqkUqXx...
└── 0.099 BTC para 1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa
Taxa: 0.001 BTC
Tamanho: 374 bytes
Interpretação:
- Alguém combinou dois UTXOs (0.5 + 0.3 = 0.8 BTC)
- Enviou 0.7 BTC para alguém
- Recebeu 0.099 BTC de troco (mesmo endereço do primeiro input)
- Pagou 0.001 BTC de taxa
- Transação está confirmada (segura)
Perguntas Frequentes
Por que Bitcoin usa UTXO em vez de contas?
UTXO permite:
- Melhor privacidade (cada transação pode usar novos endereços)
- Maior paralelismo (múltiplas transações podem ser processadas simultaneamente)
- Verificação mais simples (não precisa checar todo histórico)
- Melhor rastreamento de origem
O que acontece se eu enviar mais do que tenho?
Transação será rejeitada. Nós verificam que:
- Soma de inputs ≥ soma de outputs
- Todos os UTXOs existem e não foram gastos
- Você tem permissão para gastar (assinatura válida)
Posso cancelar uma transação?
Não, depois de enviada e confirmada, não pode ser cancelada. Antes de confirmar, você pode tentar:
- Replace-by-Fee (RBF): Enviar nova transação com taxa maior
- Child Pays for Parent (CPFP): Criar transação filha que paga taxa maior
Por que taxas variam tanto?
Taxas dependem de:
- Congestionamento da rede (muitas transações = taxas maiores)
- Tamanho da sua transação (mais inputs/outputs = maior)
- Urgência (taxa maior = confirmação mais rápida)
O que é dust (poeira)?
Dust são outputs muito pequenos (geralmente < 546 satoshis) que não valem a pena gastar porque a taxa seria maior que o valor. Muitas carteiras não criam outputs de dust.
Conclusão
Agora você entende como funcionam as transações Bitcoin na prática. Os conceitos principais são:
- UTXOs são "moedas" não gastas - sistema diferente de contas bancárias
- Inputs gastam UTXOs anteriores - referenciam transações passadas
- Outputs criam novos UTXOs - especificam destino e valor
- Assinaturas provam propriedade - sem revelar chave privada
- Taxas são a diferença - entre inputs e outputs, baseadas em tamanho
Entender transações Bitcoin te dá poder para:
- Verificar transações manualmente
- Otimizar taxas
- Entender por que algumas transações são mais caras
- Melhorar privacidade
- Debugar problemas
Continue explorando transações no blockchain explorer. Quanto mais você praticar, mais intuitivo ficará. O sistema UTXO pode parecer complexo inicialmente, mas é uma solução elegante que permite um sistema financeiro verdadeiramente descentralizado.