Script, você já ouviu essa palavra várias vezes em sua vida. Falando em termos gerais, um script é um texto escrito, com uma série de orientações que devem ser seguidas para que algo aconteça.
Nas artes cênicas, o script é conhecido como roteiro e contém os detalhes do argumento que será desenvolvido. Mas como estamos falando de tecnologia e linguagem de computação, quando você vir script de bitcoin em algum lugar, a lógica é parecida, mas com finalidades muito diferentes.
Bitcoin script é como se conhece a linguagem de programação que faz com que o BTC funcione. Trata-se de um software, que apresenta uma série de instruções que conduzem uma transação de ponta a ponta, do começo ao fim.
Tudo que o bitcoin pode fazer atualmente tem a participação do script de bitcoin. Os scripts, no geral, inclusive podem ser entendidos como uma espécie de smart contract (tipo os da rede Ehtereum), só que mais básicos.
No caso do script de bitcoin, ele funciona diferente de linguagens usadas para codar contratos inteligentes, como a Solidity. A diferença é que o bitcoin script não é turing complete. O que isso significa? Que ele não suporta todos os tipos de instruções.
Hoje vamos falar sobre como a linguagem de bitcoin funciona e como pode ser usada. Segue com a gente!
Contenidos
Como o script de bitcoin funciona?
Antes de entrar de cheio na lógica do script de bitcoin, é importante citar que o software da blockchain, também conhecido como Bitcoin Core, não está escrito em bitcoin script.
Como assim?
Por exemplo, a implementação original do código de bitcoin da rede do BTC foi toda feita com C++. Só que outras linguagens ganharam seu espaço na rede da primeira criptomoeda do mundo. Há implementações em Python, Java e até mesmo em Go.
Em outras palavras, para a versão do software de bitcoin escrita em Go, o script de bitcoin que será desenvolvido nessa versão também será escrito em Go. A mesma coisa acontece com as outras implementações: o script de bitcoin segue a linguagem da versão.
Bitcoin Script em ação
Sempre que algum usuário movimenta seus bitcoins, essa transação é acompanhada por um script que determina seus detalhes.
Na prática, o que o programa faz é checar se as condições necessárias para que o envio seja feito estão dadas. Isso também determina como o destinatário dos BTCs poderá usar suas criptos.
A grande maioria das transações empregam um script simples, dividido em duas etapas. Na primeira, os recursos são desbloqueados da carteira original e, na segunda, os BTC são bloqueados na outra wallet.
Vejamos um exemplo prático? Digamos que Henrique quer mandar 2 BTCs pra Sabrina. A primeira coisa que o script confere é se Henrique tem as private keys correspondentes desses bitcoins, por meio de sua assinatura digital.
Se estiver tudo em ordem, os BTCs são desbloqueados, mudam de endereço e voltam a ser bloqueados, só que na carteira de Sabrina, sob forma de UTXO – Unspent Transaction Output (saída de transação não gasta).
Resumindo tudo isso de uma forma mais simples: os BTC que você tem na sua wallet contém um script que informa que essas criptomoedas só podem ser usadas com a sua chave privada.
Quando as transações são mais complexas, são usados scripts com outros tipos de condições.
Felizmente, você não precisa estudar linguagem de programação para mover seus bitcoins. Aqui na Lemon, nossa plataforma resolve tudo ‘nos bastidores’ automaticamente. Aliás, você devia experimentar nosso app e ver como o mundo em crypto pode ser simples 😉.
Aplicações do script de bitcoin
Lembra que acabamos de falar de operações mais complexas? Na sequência, você acompanha dois exemplos de como o script de bitcoin pode ser usado, além de transações de transferência simples.
Wallets Multisig
Um usuário pode criar um script determinando que seus BTCs só podem ser movidos quando se apresentam duas ou mais chaves privadas. Já falamos sobre isso no artigo sobre wallets multisig.
Essa opção dá muito mais segurança para os usuários e também é útil para criar carteiras compartilhadas, que solicitam a aprovação de duas partes para que uma transação seja autorizada.
Com scripts, você pode decidir quantas private keys podem estar relacionadas à multisig e quantas são necessárias para mover seus BTCs.
Por exemplo, em uma wallet multisig 2 de 3, existem 3 chaves privadas e são necessárias pelo menos duas para que uma transação seja autorizada.
Time locks
Uma time lock é uma condição de tempo que pode ser relacionada a uma transação.
Na blockchain Bitcoin, como na maioria das outras redes, o tempo é medido em blocos. Ou seja, você pode criar um script para que uma transação só possa ser feita quando 100 (p.ex) novos blocos sejam adicionados.
Não citamos estes dois exemplos por acaso. Estas duas funções (multisig wallets e time lock) são as que se usam para criar um canal de pagamentos na Lightning Network.
A Lightning é um protocolo construído sobre a rede do BTC e permite que um usuário faça transações instantâneas e com comissões super em conta. Obviamente, a Lightning está disponível no Lemon Cash App!
O que é um Op_Code ou código de operação?
Não dá pra falar de scripts de bitcoin sem entrar no detalhe do OP_CODE. Mas, o que é isso?
Em programação, inclusive na linguagem bitcoin, tudo que é feito pelos desenvolvedores serve para que programas e aplicativos sejam criados. As linguagens são legíveis por nós, humanos, mas é preciso fazer com que os computadores também sejam capazes de entedê-las.
É aí onde entra a ‘tradução’ do código, para que ele possa ser executado por um software. Os op codes são exatamente as instruções que o computador tem que seguir para que o objetivo do programa seja atingido.
Os scripts usam OP CODES para se comunicar com o software do bitcoin. Confira alguns exemplos de bitcoin scripts:
- OP_CHECKSIG: verifica a assinatura digital do emissor dos BTCs. Sempre que seja válida e confirmada, a transação pode seguir seu curso.
- OP_RETURN: uma função que permite que informações arbitrárias extras sejam colocadas dentro da transação. O problema é que a comunidade não curtiu muito essa possibilidade, já que isso acaba tornando as transações mais complexas e, como consequência, deixava a rede menos escalável.
- Um exemplo de uso foi o protocolo conhecido como Counterparty, que usava o OP_RETURN para criar tokens dentro da rede.
Há muitos mais opcodes usados no script de bitcoin, como OP_1NEGATE, OP_NOP, OP_IF, OP_NOTIF, OP_TOALTSTAK, entre outros, e você pode ver a lista completa aqui.
E cada opcode é traduzido em uma linguagem que possa ser lida por processadores. Eles podem ser do tipo embed, control, stack operations, numerical operations, e a lista segue.
Turing Complete vs Script de Bitcoin
Mesmo que você não seja programador, vale muito a pena entender porque o script de bitcoin não é turing complete.
Pra isso, vejamos o que significa turing complete (ou completude de turing). Em linguagem de programação, teoricamente, isso significa que, com suficientes recursos, qualquer problema computacional pode ser resolvido.
Na prática, isso não é necessariamente possível, mas o termo é usado para descrever sistemas que não apresentam nenhuma limitação técnica.
Linguagens como Java ou Python são consideradas turing complete.
Voltando ao protagonista desta wiki: o Bitcoin Script não é turing complete simplesmente porque não tem essa necessidade.
Satoshi feelings
Quando Satoshi criou o bitcoin, tentou fazer tudo da forma mais simples possível para priorizar a segurança. Em programação, quanto mais complexo seja um sistema, mais possibilidade de vetores de vulnerabilidade.
Como o bitcoin centrou suas atenções em ser uma rede descentralizada de pagamentos, não preciso de uma linguagem de programação tão complexa.
Já quando falamos de redes que suportam smart contracts, como a Ethereum, seu propósito geral era permitir a criação de aplicativos descentralizados. Em outras palavras: isso implicava no uso de linguagens turing complete (no caso, Solidity).
Por isso, os scripts de bitcoin são softwares que permitem que diferentes condições sejam atribuídas às transações em BTC.
Quando alguém quer mover bitcoins de carteira, são usadas versões mais simples, como comentamos antes. Mas também podem ser desenvolvidos scripts mais complexos para permitir outros tipos de transações.
Tem gente que acredita que os scripts podem ser usados para criar mais funcionalidades na blockchain do bitcoin. Por outro lado, também há argumentos que a rede Bitcoin cumpre perfeitamente sua função de network de pagamentos digitais e ficar mudando isso poderia prejudicar seu funcionamento.
O fato é que ambas as posturas coexistem e vão continuar competindo entre si. Só o tempo dirá qual é o caminho que a comunidade bitcoin vai decidir trilhar.