Visão Geral
Cada UTXO do Bitcoin é bloqueado por uma condição de gasto — um conjunto de requisitos criptográficos e lógicos que devem ser atendidos antes que o bitcoin possa ser transferido. Essas condições são codificadas no script de bloqueio da saída (também chamado de scriptPubKey) e são satisfeitas fornecendo o script de desbloqueio correto (scriptSig) ou dados de testemunha em uma transação de gasto.
Condições de Gasto Comuns
O Bitcoin suporta uma variedade de condições de gasto, de simples a altamente complexas:
- Assinatura única: A condição mais comum, exigindo uma assinatura digital válida de uma chave privada.
- Multisig: Requer M de N assinaturas (por exemplo, 2 de 3) para autorizar o gasto.
- Bloqueio de hash: Requer revelar uma pré-imagem que faz hash para um valor especificado, usado em HTLCs.
- Timelock: Impede o gasto até que uma certa altura de bloco ou timestamp seja atingida.
- Combinação: Múltiplas condições podem ser combinadas usando a lógica do Script Bitcoin (AND, OR, IF/ELSE).
Modelo de Execução de Script
Script de Bloqueio (no UTXO):
OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Script de Desbloqueio (na tx gastadora):
<assinatura> <pubKey>
Execução Combinada:
Pilha: [assinatura, pubKey]
-> OP_DUP -> [assinatura, pubKey, pubKey]
-> OP_HASH160 -> [assinatura, pubKey, pubKeyHash]
-> <hash> -> [assinatura, pubKey, pubKeyHash, hashEsperado]
-> OP_EQUALVERIFY -> [assinatura, pubKey] (hashes coincidem)
-> OP_CHECKSIG -> [TRUE] (assinatura válida)
Taproot e Condições Avançadas
Com o Taproot, as condições de gasto ganharam flexibilidade significativa. Uma saída Taproot pode ser gasta através de um gasto por caminho de chave simples (assinatura Schnorr única) ou um gasto por caminho de script que revela uma de potencialmente muitas condições de gasto alternativas ocultas em uma árvore de Merkle. Isso permite que condições complexas permaneçam privadas a menos que sejam realmente usadas.
Casos Extremos
- Se uma condição de gasto for muito complexa, o script pode exceder os limites de tamanho ou exigir computação excessiva, tornando o UTXO efetivamente impossível de gastar.
- Saídas com o opcode
OP_RETURNsão comprovadamente impossíveis de gastar por design, usadas para incorporar dados na cadeia.