Bitcoin Script é a linguagem que o Bitcoin usa para fazer tudo o que pode, desde o envio de fundos de uma carteira até a criação de contas multiusuários. Todas estas funcionalidades estão contidas numa ferramenta extensível e poderosa simples que conheceremos a seguir.
CQuando falamos sobre script Bitcoin, Estamos falando de uma linguagem de programação simples usada em Bitcoin para o processamento de transações que são lidas da esquerda para a direita. Isso se baseia em uma série de estruturas lineares, conhecidas como pilha, contendo dados existentes em ordem UEPS (Último a Entrar - Firt Out). Cada instrução neste idioma é executada consecutivamente, uma após a outra.
Este idioma não é Full Turing porque a sua funcionalidade é limitada e não pode fazer um loop. Portanto, não é capaz de resolver nenhum tipo de problema, como máquinas Turing. No entanto, esta limitação é intencional, pois evita loop infinito ou sem fim e execução de erros. Onde partes mal-intencionadas do programa podem ser livres para criar operações complicadas para consumir a taxa de hash e desacelerar o sistema Bitcoin através de loops infinitos.
Uma linguagem de programação é necessária porque permite-nos escrever programas e que os computadores executem os nossos desejos. Em Bitcoin para comunicar os nossos desejos, os códigos de operação (OP_CODES), que servem várias funções. Como manipulação de memória, matemática, loops, chamadas de função, entre muitos outros.
Assim, o Bitcoin Script é essencialmente um conjunto de instruções programadas que são registadas a cada transação feita. Estas instruções descrevem como os usuários podem aceder e utilizar os bitcoins disponíveis na rede.
O que é um OP_CODE ou código de operação?
Na informática, um OP_CODE (Operation Code, em inglês) ou código de operação, é uma parte de uma instrução em linguagem de máquina que especifica a operação a ser executada. A sua especificação e formato serão determinados pela arquitetura do conjunto de instruções (ISA) do componente que processa a instrução. Geralmente, este processamento é feito pelo hardware do computador (geralmente um CPU).
Mas também pode ser um software especialmente preparado para emular o funcionamento de uma CPU e processar essas instruções. Em geral, uma instrução completa em linguagem de máquina contém um OP_CODE e, opcionalmente, a especificação de um ou mais operandos, sobre os quais o código de operação deve atuar. Algumas operações têm operandos implícitos ou nenhum.
No Bitcoin e em muitas outras criptomoedas, OP_CODES são a espinha dorsal do sistema que permite programar instruções de transação. Vamos recordar que o Bitcoin (e outras criptomoedas derivadas dele) são dinheiro programável. E aqui a palavra-chave é "programável", já que o Bitcoin Script é realmente uma linguagem de programação em que são fornecidas instruções em OP_CODES que a rede Bitcoin definiu anteriormente para o seu funcionamento. De facto, devido à estrutura em que o BItcoin foi criado, existe a possibilidade de definir 256 OP_CODES, diferentes dos quais começam do número 0 a 255. Desses 256 OP_CODES, um total de 116 está atualmente ativo.
Estes OP_CODES são os que permitem executar as diferentes operações no Bitcoin e o seu agendamento de transações, como controlo de fluxo de dados, gestão de constantes, gestão de pilha, gestão lógica, aritmética, bloqueio de tempo, pseudo-palavras, operações criptográficas e palavras reservadas. Poderá ver uma lista completa e atualizada dos diferentes OP_CODES diretamente no código Bitcoin.
scritpSig e scriptPubKey, as partes essenciais de todo o Bitcoin Script
Na rede Bitcoin, cada Bitcoin Script é dividido em dois tipos de scripts, o scriptSig y scriptPubKey. O primeiro, o scriptSig é o script de desbloqueio, que requer uma chave pública e uma assinatura digital
O segundo,o scriptPubKey, é o script de bloqueio, que contém um hash de chave pública, também chamado de endereço Bitcoin. Alguns scripts Bitcoin requerem várias assinaturas, ou seja, a autorização de vários usuários para realizar a transação. Neste caso, o script é mais complicado porque é uma operação muito maior que a operação ponto a ponto padrão. De facto, o agendamento das transações de Bitcoin, como tal, é armazenado nesta parte do script.
Objetivo da sua criação
O objetivo de criar uma linguagem de script no Bitcoin é fornecer uma série de parâmetros fáceis e flexíveis para permitir uma transação. Então quando Satoshi Nakamoto desenvolveu o Bitcoin, desativou várias funções, incluindo multiplicação. Portanto, o script é mantido simples em termos de programação. Então é essa linguagem de programação que determina se uma operação pode ou não ser executada. Ou seja, se a operação está autorizada para a transferência de fundos.
Simplificando, a criação do Bitcoin Script é o que fornece a natureza programável do Bitcoin. É isto que nos permite, por exemplo, enviar uma transação que é validada apenas se certas condições forem atendidas. Esta propriedade é algo exclusivo de Bitcoin e criptomoedas, algo que o dinheiro digital de hoje não pode alcançar, muito menos dinheiro físico arcaico. É a evolução do dinheiro que chegou a um ponto em que mesmo o dinheiro pode agir de forma independente e descentralizada, simplesmente assistindo à programação nele incorporada.
Além disso, o script Bitcoin também impede a criação de erros no sistema e o uso desnecessário de transações muito complexas. O script facilita o cálculo das transações. Além disso, loops infinitos exigem muito mais poder de computação e desaceleram as redes, como mencionado no começo.
Exemplo de um Bitcoin Script
Antes de continuar a aprofundar o que é e os diferentes elementos que compõem um Bitcoin Script, vamos ver um pequeno exemplo disso. A seguir, veremos um pequeno Bitcoin Script amplamente usado hoje em dia para transações de Bitcoin. Explicaremos o seu comportamento e funcionamento, bem como as suas diferentes partes, e depois aprofundaremos as suas propriedades.
Exemplo de um Bitcoin Script: transações no Bitcoin usando o script P2PKH
O Bitcoin Script está presente em todas as ações do Bitcoin. A verdade é que cada operação no Bitcoin é realizada por um script específico que define o que será feito. Fora o que esse script diz, nada pode acontecer.
Por exemplo, se quisermos fazer uma transação, um script para isso seria o seguinte:
Todo o conteúdo acima é uma transação simples de Bitcoin do tipo P2PKH (pagamento para hash de chave pública). Este tipo de script é um script padrão e é a forma mais usada para enviar bitcoins. À primeira vista, parece algo muito enigmático e difícil de entender. A verdade é que por trás de tal complexidade, existe um sistema simples que explicaremos agora.
Explicando minuciosamente a transação
O Bitcoin Script anterior é delimitado em duas partes: scriptPubKey e scriptSig. No primeiro, há as ações a serem executadas, enquanto o segundo contém a assinatura e a chave pública para verificar a autenticidade de tais ações. Isto garante que apenas aqueles que têm acesso aos fundos podem realizar qualquer operação com eles. Por outro lado, existem os OP_CODES que na operação são os seguintes:
- OP_DUP: Duplica o elemento da pilha superior.
- OP_HASH160: A entrada é codificada duas vezes: primeiro com SHA-256 e depois com RIPEMD-160.
- OP_EQUALVERIFY: Verifica se os dados inseridos estão corretos e válidos.
- OP_CHECKSIG: As saídas, entradas e o script de toda a transação são resumidos num hash. A assinatura usada deve ser válida para esse hash e deve estar junto à chave pública.
Agora, o que acontece durante a execução do script é o seguinte:
- Primeiro, a chave pública original do proprietário (que está no scriptSig) dos fundos é duplicada.
- A chave pública duplicada passa por um processo de hash. Nesse processo, aplica-se primeiro um hash SHA-256 e ao resultado é aplicado um hash RIPEMD-160.
- O resultado dos hashes é comparado com o hash da chave pública que está no scriptPubKey para garantir que seja EQUALVERIFY (ou seja, se é a mesma chave e se é verificada como válida).
- Se corresponder, o script continuará a ser executado e será realizado o CHECKSIG para verificar a assinatura com a chave pública.
Desta forma, tudo o que está indicado no script é realizado de forma segura e programada. Se quiser saber mais sobre como funciona o Bitcoin Script, pode visite o nosso serviço Bit2Me TV, onde poderá ver alguns vídeos a explicar muito mais sobre esta linguagem interessante.
Bitcoin Script, a linguagem smart contract do Bitcoin
Muitas pessoas pensam e argumentam que o Bitcoin é incapaz de executar smart contracts. A verdade é que isso não é verdade, pois com o Bitcoin Script, poderá cria contratos inteligentes. Certamente, os seus recursos são limitados em comparação com o que poderá fazer, por exemplo em Ethereum, mas isso não significa que o Bitcoin Script não tenha a capacidade de criar contratos inteligentes. Mas vamos explicar isto de uma forma mais simples e detalhada.
Em primeiro lugar, como dissemos, o Bitcoin Script não é uma linguagem Full Turing. Isto ocorre porque não requer maior complexidade para executar as funções pretendidas. Mas, uma das principais razões é que, como não há loops, poderá saber com certeza quando e como um determinado programa terminará. Não há possibilidade de execução de erros, o que oferece maior segurança. Além disso, não há possibilidade de os programas estarem bloqueados ou o executor estar bloqueado, que neste caso é o Bitcoin.
Um bom exemplo da importância destas proteções seria que, com o Bitcoin Script, é impossível criar scripts que funcionem para sempre. De facto, o risco de um script que dura para sempre é que abriria portas para atacar a rede através de um ataque de negação de serviço (DoS).
Mas o facto do Bitcoin Script limitar este tipo de operação protege a rede de tais ataques. Portanto, não há possibilidades de um programa Script com um loop contínuo impedir o Bitcoin de funcionar corretamente. Simplificando, o Bitcoin Script é muito mais seguro do que as suas contrapartes mais complexas, como as apresentadas por Ethereum ou NEO.
Evolução do Bitcoin Script
A linguagem Script está presente no Bitcoin desde a sua primeira versão. Analisando a estrutura dos pagamentos digitais, Satoshi Nakamoto, desenvolvedor do Bitcoin, determinou que era necessário um modelo que permitisse à máquina determinar se as transações foram feitas gastando as saídas com êxito ou não. Por outras palavras, será verificado se as assinaturas estavam corretas e se correspondiam à chave pública.
Este é um dos problemas mais estudados em informática, determinar se os gastos são bem-sucedidos ou não, a fim de evitar os duplos gastos. E a solução para isso foi usar uma máquina que atendesse a certos critérios estabelecidos. No Bitcoin, deve sempre parar, para que a implementação de uma linguagem incompleta de Turing baseada um sistema de pilha seja ideal. Assim, o mecanismo que gere os scripts no Bitcoin é muito simples e seguro.
No início, o Script apresentava vários erros graves e alguns deles ainda existem. Um exemplo é o bug OP_LSHIFT , que era conhecido como o bug que poderia matar o Bitcoin. Ou o também conhecido Erro de verificação de script que Gavin Andressen e Satoshi Nakamoto corrigiram em 2010.
A existência deste tipo de erro levará muitos a pensar que Nakamoto não realizou testes suficientes no Script antes do lançamento do Bitcoin. De facto, muitos especulam que o script foi uma ideia de última hora. Talvez a ideia original de Nakamoto fosse enviar bitcoins diretamente para chaves públicas, mas, adicionando suporte aos endereços do Bitcoin, ele percebeu que uma linguagem de script seria realmente útil para fornecer compatibilidade direta.
Características
A linguagem de Script do Bitcoin tem várias características e qualidades, entre as quais podemos mencionar:
- É simples e requer um processamento mínimo.
- A sua funcionalidade é limitada, o que fornece maior segurança ao sistema.
- Sendo um idioma incompleto de Turing, não possui loops, portanto, é garantido que o programa pare de repetir e termine. Assim, evita-se a possibilidade de erros e códigos maliciosos na rede Bitcoin.
- A sua simplicidade permite que seja implementado numa ampla gama de dispositivos.
- Não há estado anterior ou posterior da execução do script. Todas as informações necessárias para executar o script devem estar contidas nele.
- É baseado numa pilha e pode usar dois tipos. Uma principal e uma alternativa. Onde esta última é usada para o armazenamento de dados de cálculo de etapas intermédias. Da mesma forma que a tecla de memória nas calculadoras.
- A linguagem de script do Bitcoin é bastante pequena. Apenas pode conter 256 instruções, pois cada instrução é expressa num byte.