Skip to main content

Bitcoin Script | Bitcoin Glossary | Mapping Bitcoin

Bitcoin Script

Protocolo

Also known as: Script

Linguagem não Turing-completa baseada em pilha para definir condições de gasto no Bitcoin. Permite multisig, timelocks e bloqueios de hash de forma segura.

Visão geral

O Bitcoin Script é a linguagem de programação que alimenta todas as transações Bitcoin. Cada saída de transação contém um script de bloqueio (scriptPubKey) que especifica as condições sob as quais a saída pode ser gasta. Para gastar essa saída, uma transação subsequente deve fornecer um script de desbloqueio (scriptSig) que satisfaça essas condições. O Script é intencionalmente limitado em capacidade para priorizar segurança e previsibilidade.

Como funciona a execução do Script

O Script usa um modelo de execução baseado em pilha onde dados e operadores são processados da esquerda para a direita, empurrando valores para e retirando valores de uma pilha:

Exemplo: Verificação P2PKH (Pay-to-Public-Key-Hash)

Script de desbloqueio (scriptSig):     <signature> <public_key>
Script de bloqueio (scriptPubKey):    OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

Execução:
  Pilha: []
  Empurrar <signature>         → [sig]
  Empurrar <public_key>        → [sig, pubKey]
  OP_DUP                       → [sig, pubKey, pubKey]
  OP_HASH160                   → [sig, pubKey, hash(pubKey)]
  Empurrar <pubKeyHash>        → [sig, pubKey, hash(pubKey), pubKeyHash]
  OP_EQUALVERIFY               → [sig, pubKey]        (hashes devem coincidir)
  OP_CHECKSIG                  → [true]               (assinatura válida)

Filosofia de design

O Script é deliberadamente não Turing-completo: não tem loops e sempre termina. Essa escolha de design previne ataques de negação de serviço e garante que o tempo de execução de cada script possa ser limitado. Embora isso limite a expressividade do Script em comparação com linguagens de contratos inteligentes de uso geral, torna a validação de transações do Bitcoin altamente previsível e segura.

Tipos de script comuns

  • P2PKH: Pagamento para um hash de chave pública (endereços legacy começando com 1)
  • P2SH: Pagamento para um hash de script (endereços começando com 3), habilitando scripts complexos como multisig
  • P2WPKH/P2WSH: Versões SegWit com dados witness separados da transação
  • P2TR: Saídas Taproot que podem ser gastas via caminho de chave ou caminho de script

Casos extremos

Um caso extremo notável é o opcode OP_RETURN, que marca uma saída como comprovadamente não gastável. Isso é usado para incorporar pequenas quantidades de dados arbitrários no blockchain sem criar UTXOs não gastáveis que os nós precisam rastrear indefinidamente.