Script
A mini linguagem de programação que trava e destrava bitcoins
Script é uma mini linguagem de programação usada como mecanismo de travamento das saídas nas transações de bitcoin.
Se um script completo (destravamento + travamento) é válido, a saída é "destravada" e pode ser gasta.
A Linguagem Script
O que é Script?
Script é uma linguagem de programação bem básica. Ela consiste em duas coisas:
1. Opcodes
Os opcodes são comandos que realizam operações — por exemplo, OP_DUP (duplica o item do topo da pilha), OP_HASH160 (faz o hash do item do topo), OP_EQUALVERIFY (verifica se dois itens são iguais) e OP_CHECKSIG (verifica uma assinatura contra uma chave pública). Cada opcode é representado por um único byte.
2. Dados
Os elementos de dados dentro de um Script (ex.: chaves públicas, assinaturas) precisam ser empurrados manualmente para a pilha usando um opcode de push. O opcode usado depende de quantos bytes você quer empurrar:
OP_0aOP_16— empurram os números de 0 a 16 (bytes0x00e0x51–0x60).OP_PUSHBYTES_X(0x01–0x4b) — empurram de 1 a 75 bytes.OP_PUSHDATA1/2/4— empurram quantidades maiores de dados.
Execução
Como um script é executado?
O Script é uma linguagem baseada em pilha (stack). Os comandos são executados da esquerda para a direita. Para gastar uma saída, o ScriptSig (destravamento) é concatenado com o ScriptPubKey (travamento), e o resultado é executado:
- Os dados são empurrados para a pilha.
- Os opcodes retiram itens da pilha, operam sobre eles e empurram os resultados de volta.
Se, ao final da execução, o item do topo da pilha for "verdadeiro" (qualquer valor diferente de zero/vazio), o script é válido e a saída é destravada.
Validade
Um script é inválido se: a execução terminar com "falso" no topo da pilha; um opcode OP_VERIFY falhar; ou um opcode inválido/desabilitado (como OP_RETURN) for encontrado.
Scripts Padrão
Quais scripts os nós retransmitem?
Embora você possa criar qualquer script personalizado, os nós só retransmitem um conjunto de padrões "padrão" (standard). Os tipos padrão são:
Legados:
- P2PK — Pay To Public Key
- P2PKH — Pay To Public Key Hash
- P2MS — Pay To Multisig
- P2SH — Pay To Script Hash
- OP_RETURN — armazenamento de dados (não gastável)
SegWit / Taproot:
- P2WPKH — Pay To Witness Public Key Hash
- P2WSH — Pay To Witness Script Hash
- P2SH-P2WPKH e P2SH-P2WSH — versões aninhadas
- P2TR — Pay To Taproot
Os nós não retransmitem scripts não padrão para proteger os usuários de criar travas com erros (e por isso scripts complexos são geralmente embrulhados em P2SH ou P2WSH).
Limites
Quais são os limites do Script?
- Limites de validade (consenso): um script não pode ter mais de 201 opcodes, a pilha não pode exceder 1000 itens, e um item de dados não pode ter mais de 520 bytes.
- Limites de "padronicidade" (relay): além das regras de consenso, os nós só retransmitem os tipos de script padrão listados acima.
O Bitcoin Script é intencionalmente não Turing-completo (não tem laços), o que mantém a execução previsível e segura.