Scripts de Transação
Introdução: O que é um Script?
No ecossistema do Bitcoin, um script é uma linguagem de programação simples, baseada em pilha (stack-based), e deliberadamente não Turing-completa. Sua função principal é definir as condições que devem ser satisfeitas para que uma saída de transação (um UTXO) possa ser gasta. O script funciona como um "cadeado" que protege os fundos, determinando quem pode acessá-los e sob quais condições.
Essa simplicidade é uma escolha de design deliberada para garantir a segurança e a auditabilidade do sistema. Ao contrário de linguagens de programação complexas, o script do Bitcoin possui um conjunto limitado de operações (opcodes) que são determinísticas e previsíveis, eliminando ambiguidades e vetores de ataque potenciais.
A Execução do Script: scriptSig e scriptPubKey
A validação de uma transação no Bitcoin depende da interação entre dois componentes principais:
O processo de validação funciona da seguinte maneira: um nó da rede Bitcoin concatena o scriptSig da entrada com o scriptPubKey da saída correspondente e executa o script resultante. A transação é válida apenas se a execução for concluída sem erros e com um valor true no topo da pilha.
O Tipo de Script Mais Comum: P2PKH (Pay-to-Public-Key-Hash)
O P2PKH é o tipo de script mais utilizado para transações simples, associado aos endereços que começam com '1'. Este tipo de script permite que os bitcoins sejam enviados para o hash de uma chave pública, oferecendo um equilíbrio entre segurança e conveniência.
Um script P2PKH é validado através dos seguintes passos:
- O
scriptSigfornece uma assinatura e a chave pública do proprietário. - O
scriptPubKeyverifica se a assinatura é válida para a chave pública fornecida. - Em seguida, ele calcula o hash (SHA-256 e RIPEMD-160) da chave pública fornecida e o compara com o hash do endereço de destino.
- Se a assinatura for válida e os hashes corresponderem, os fundos podem ser gastos.
Flexibilidade e Outros Tipos de Script
O sistema de scripts do Bitcoin é mais poderoso do que apenas o P2PKH, permitindo a criação de contratos mais complexos:
- P2SH (Pay-to-Script-Hash): Este tipo (endereços que começam com '3') permite que o remetente envie bitcoins para o hash de um script, em vez de para o hash de uma chave pública. O destinatário então deve revelar o script original (o "script de resgate") e fornecer os dados para satisfazê-lo. Isso é útil para Multisig e outros contratos complexos, mantendo a transação do remetente simples.
- Multisig (Multisignature): Um script que exige que M-de-N assinaturas sejam fornecidas para que os fundos possam ser gastos (por exemplo, 2 de 3). Isso aumenta a segurança, exigindo a aprovação de múltiplas partes. É especialmente útil para contas corporativas, cofres de família ou cenários onde a confiança é distribuída.
- OP_RETURN: Um opcode que permite que os dados sejam incluídos em uma transação de forma imutável, "queimando" uma pequena quantidade de bitcoins para registrar esses dados na blockchain. Isso possibilitou a criação de protocolos como o CounterParty e o Omni Layer sobre a blockchain do Bitcoin.
- P2WPKH e P2WSH (SegWit): Introduzidos com a atualização Segregated Witness (SegWit), esses tipos de script separam os dados de assinatura dos dados de transação, aumentando a capacidade e eficiência da rede. Os endereços SegWit começam com '3' (P2SH-P2WPKH) ou 'bc1' (nativo SegWit).
Conclusão: A Elegância da Simplicidade
O sistema de scripting do Bitcoin é uma peça de engenharia notável. Ele oferece um equilíbrio entre simplicidade (para garantir a segurança) e flexibilidade (para permitir a programação monetária). Essa linguagem de script é a base que permite que o Bitcoin seja mais do que um simples sistema de pagamento, abrindo caminho para o que hoje conhecemos como contratos inteligentes de forma segura e descentralizada.
Apesar de suas limitações deliberadas (como não ser Turing-completo), o sistema de script do Bitcoin demonstrou ser extremamente robusto e versátil ao longo dos anos, suportando não apenas transações simples, mas também uma variedade crescente de casos de uso mais complexos, desde carteiras multisig até tokens e protocolos de segunda camada como a Lightning Network.