Intermediário Aula 2 4 min de leitura

Script: o pequeno idioma que tranca cada moeda

Toda saída carrega um cadeado escrito numa linguagem minúscula, e gastar é apresentar a chave que ele aceita.

Toda moeda de bitcoin está trancada por um programa. Ele é minúsculo, deliberadamente burro, e roda bilhões de vezes por dia sem que ninguém repare. A linguagem em que ele é escrito se chama Script, foi desenhada por Satoshi junto com o resto, e entendê-la é entender o que exatamente uma transação prova.

Script funciona empilhando. Imagine o espeto de papéis de um balcão antigo: só se põe uma folha no topo e só se tira a folha do topo. Cada instrução ou empilha um dado, ou tira algumas folhas do topo, faz uma conta com elas e empilha o resultado. No fim, se o que sobrou no topo é verdadeiro, o gasto é válido.

Só entra folha pelo topo, e só sai a folha do topo.

Vale ler o cadeado mais comum da história do Bitcoin, o P2PKH, linha por linha. Ele diz: duplique o que está no topo, calcule o hash160 disso, empilhe este hash que eu guardei, verifique que os dois são iguais e pare tudo se não forem, e por fim confira a assinatura.

Quem vai gastar apresenta duas coisas: a assinatura e a chave pública. As duas são empilhadas primeiro, e então o cadeado roda. A duplicação existe porque a chave pública será usada duas vezes: uma para virar hash e ser comparada com o endereço, outra para conferir a assinatura. A comparação de hashes é o momento em que a rede confirma que aquela chave pública é mesmo a dona do endereço. A conferência da assinatura é o momento em que ela confirma que quem apresentou a chave também tem a privada correspondente.

Repare no que acabou de acontecer. As duas perguntas do Módulo 4 — este endereço é desta chave, e esta assinatura é desta chave — não são regras escondidas no programa dos nós. Elas estão escritas, em miniatura, dentro da própria moeda.

O formato moderno, o P2WPKH, faz a mesma coisa com menos palavras. O cadeado vira apenas um marcador de versão seguido do hash160, e a assinatura e a chave pública viajam numa área separada da transação, a testemunha. O nó reconhece o padrão e aplica a mesma verificação sem que ela precise ser escrita. Menos bytes, mesma garantia, taxa menor.

Agora o mais importante: o que Script não faz. Ele não tem laços de repetição. Nenhuma instrução volta para trás, nenhum programa pode rodar duas vezes o mesmo trecho. Toda execução termina, e termina rápido, em qualquer nó do mundo. Essa limitação não é preguiça de projeto: é o que garante que verificar um bloco custe um tempo previsível, e que ninguém possa travar a rede escrevendo um cadeado que nunca termina.

O cilindro toca uma vez e para. Não existe voltar ao começo.

Ele também não enxerga nada fora da transação. Não sabe a data de hoje pelo relógio, não consulta um preço, não guarda memória entre uma transação e outra. Tudo o que ele decide, decide com o que está diante dele.

Dentro desses limites, cabe mais coisa do que parece. Script exige várias assinaturas, e é assim que o multisig da trilha anterior existe. Script tranca uma moeda até uma data ou até que um número de blocos passe — o OP_CHECKLOCKTIMEVERIFY, adicionado em 2015, é literalmente o cofre de relógio dos bancos do século XIX, escrito em software. E Script tranca uma moeda atrás de um segredo, liberando-a para quem revelar o dado que produz determinado hash, mecanismo que sustenta a rede Lightning inteira.

A porta não obedece a ninguém antes da hora marcada.

Em agosto de 2010, Satoshi desativou cerca de quinze instruções da linguagem de uma vez, entre elas as que juntavam ou dividiam dados, por medo de comportamentos que ninguém tinha conseguido analisar direito. A decisão é criticada até hoje por quem gostaria de uma linguagem mais expressiva, e defendida por quem prefere uma rede pequena o bastante para ser auditada por inteiro. A discussão continua aberta e é honesta dos dois lados.

Ter um cadeado válido não basta para gastar. A transação ainda precisa chegar aos mineradores, disputar espaço com milhares de outras e ser escolhida. Na próxima aula, a mempool e o leilão que decide quem entra no próximo bloco.