Skip to main content

Script | Bitcoin Glossary | Mapping Bitcoin

Script

Protocolo

Also known as: Bitcoin Script

Linguagem baseada em pilha do Bitcoin para definir condições de gasto de saídas. Não é Turing-completa, garantindo execução segura e previsível nos nós.

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 ScriptDescriçãoPrefixo de endereço
P2PKPagamento à Chave Pública (original, raramente usado)N/A
P2PKHPagamento ao Hash de Chave Pública1...
P2SHPagamento ao Hash de Script3...
P2WPKHPagamento ao Hash de Chave Pública Testemunhabc1q...
P2TRPagamento ao Taprootbc1p...

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.