Visão geral
O Script é a linguagem de programação integrada do Bitcoin que define as condições para gastar saídas de transações. Cada saída de bitcoin contém um pequeno programa (o script de bloqueio ou scriptPubKey) que especifica quais evidências devem ser fornecidas para gastá-la. O gastador fornece as evidências no script de desbloqueio (scriptSig) ou nos dados de testemunha. Quando um nó valida uma transação, ele executa esses scripts para determinar se as condições de gasto são satisfeitas.
Execução baseada em pilha
O Script usa um modelo de execução baseado em pilha, similar à linguagem de programação Forth. Dados e operações são processados usando uma pilha último a entrar, primeiro a sair (LIFO):
Exemplo: Execução de Script P2PKH
Script de desbloqueio: <assinatura> <chavePublica>
Script de bloqueio: OP_DUP OP_HASH160 <hashChavePublica> OP_EQUALVERIFY OP_CHECKSIG
Execução (da esquerda para direita, a pilha cresce para cima):
Passo 1: Passo 2: Passo 3: Passo 4: Passo 5:
<assin> <chavePub> <chavePub> <hash160>
<assin> <chavePub> <chavePub> OP_EQUALVERIFY
<assin> <assin> (compara os 2 do topo)
<chavePub>
<assin>
Push assin Push chave OP_DUP OP_HASH160 Passo 6:
OP_CHECKSIG
→ VERDADEIRO ✓
Por que não é Turing-completo
O Script é deliberadamente limitado. Não tem laços, não tem recursão e tem um conjunto restrito de opcodes. Isso é uma característica, não uma limitação:
- Execução previsível — Todo script termina em tempo e memória limitados
- Sem laços infinitos — Um script malicioso não pode consumir recursos infinitos do nó
- Verificável — O comportamento de qualquer script pode ser totalmente analisado antes da execução
- Focado em segurança — A superfície de ataque é minimizada limitando as capacidades
Tipos comuns de Script
| Tipo de Script | Descrição | Prefixo de endereço |
|---|---|---|
| P2PK | Pagamento à Chave Pública (original, raramente usado) | N/A |
| P2PKH | Pagamento ao Hash de Chave Pública | 1... |
| P2SH | Pagamento ao Hash de Script | 3... |
| P2WPKH | Pagamento ao Hash de Chave Pública Testemunha | bc1q... |
| P2TR | Pagamento ao Taproot | bc1p... |
Evolução do Script
O Bitcoin Script evoluiu através de várias atualizações:
- Original — Opcodes básicos para verificações de assinatura e comparações de hash
- P2SH (2012) — Habilitou scripts complexos escondidos por trás de um hash
- SegWit (2017) — Moveu a execução do script para a testemunha, corrigindo a maleabilidade de transações
- Taproot (2021) — Introduziu o Tapscript com novos opcodes e verificação Schnorr
Equívoco comum
O Bitcoin Script às vezes é descartado como muito limitado para programabilidade útil. Na realidade, ele suporta uma ampla gama de condições de gasto incluindo multisig, timelocks, bloqueios de hash e combinações dos mesmos. O projeto Miniscript demonstra que políticas complexas e combináveis podem ser expressas dentro das restrições do Script enquanto mantêm garantias de segurança.