Visão Geral
Um opcode (código de operação) é uma instrução única no Bitcoin Script, a linguagem de programação baseada em pilha usada para definir as condições de gasto do bitcoin. Cada opcode realiza uma operação específica, como empurrar dados para a pilha, realizar aritmética, verificar assinaturas criptográficas ou controlar o fluxo do programa. Os opcodes são os blocos de construção fundamentais de toda a lógica de transações Bitcoin.
Categorias de Opcodes
┌──────────────────┬──────────────────────────────┐
│ Categoria │ Exemplos │
├──────────────────┼──────────────────────────────┤
│ Constantes │ OP_0, OP_1, OP_PUSHDATA │
│ Controle de fluxo│ OP_IF, OP_ELSE, OP_ENDIF │
│ Pilha │ OP_DUP, OP_DROP, OP_SWAP │
│ Aritmética │ OP_ADD, OP_SUB, OP_EQUAL │
│ Criptografia │ OP_HASH160, OP_CHECKSIG │
│ Bloqueio temporal│ OP_CHECKLOCKTIMEVERIFY │
│ Especiais │ OP_RETURN, OP_NOP │
│ Desabilitados │ OP_CAT, OP_MUL (segurança) │
└──────────────────┴──────────────────────────────┘
Como os Opcodes Executam
Bitcoin Script é uma linguagem baseada em pilha. Os dados são empurrados para uma pilha, e os opcodes retiram valores da pilha, realizam operações e empurram os resultados de volta.
Exemplo: Verificar uma assinatura (P2PKH simplificado)
Pilha: Script:
<sig> <pubKey> OP_DUP OP_HASH160
<pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG
Passo 1: Empurrar <sig> Pilha: [sig]
Passo 2: Empurrar <pubKey> Pilha: [sig, pubKey]
Passo 3: OP_DUP Pilha: [sig, pubKey, pubKey]
Passo 4: OP_HASH160 Pilha: [sig, pubKey, hash]
Passo 5: Empurrar <pubKeyHash> Pilha: [sig, pubKey, hash, pubKeyHash]
Passo 6: OP_EQUALVERIFY Pilha: [sig, pubKey] (hashes coincidem)
Passo 7: OP_CHECKSIG Pilha: [VERDADEIRO] ← Gasto válido!
Opcodes Desabilitados
Vários opcodes foram desabilitados no início da história do Bitcoin por Satoshi Nakamoto devido a preocupações de segurança, incluindo OP_CAT (concatenar), OP_MUL (multiplicar) e OP_LSHIFT. Alguns desses são objeto de propostas de reabilitação em andamento na comunidade de desenvolvimento Bitcoin.
Conceitos Errôneos Comuns
Bitcoin Script é intencionalmente não Turing-completo — carece de loops e computação ilimitada. Esta é uma característica de segurança, não uma limitação. Garante que a validação do script sempre termine e tenha uso previsível de recursos, prevenindo ataques de negação de serviço contra nós.