O Que são smart-contracts: teoria & prática

  • Fundamentos
  • Conceitos técnicos
  • Peer-to-peer
  • Funções hash
  • Implementação
  • Blockchain
  • Consenso
  • Unindo as partes: análise de funcionamento
  • Contratos
  • Aplicações dos smart-contracts da Ethereum
  • Tokens
  • DApps & DAO’s
  • Para saber mais
  • Bibliografia

Fundamentos

smart-contract surge da ideia de unificar os conceitos de contrato e controle. Historicamente, as fases de criação de um contrato (o estabelecimento de obrigações e direitos entre duas partes), e do controle (verificação da execução de um contrato), estiveram separadas. O surgimento de novas tecnologias de informação criam possibilidades de conciliação desses conceitos, de forma que nossas soluções mais se adequem ao mundo digital (Szabo 1997).

Um exemplo simples dado por Szabo, porém ilustrativo, é o da máquina de vendas automática: através de sua lógica interna (que conta moedas e dispensa salgadinhos) implementa os termos de um contrato. As obrigações do cliente são de fornecer a quantia correta, e a da máquina de dispensar o item adequado. Por outro lado, pelo fato de estar fechada, implementa uma forma de controle; no caso, um controle pró-ativo, pois torna difícil e custoso burlar os termos do contrato (roubar da máquina). Além disso, o contrato e o controle estão implementados num meio automatizado — o contrato se auto executa.

(Szabo 1997) postula três qualidades que caracterizam uma tecnologia que se qualificaria como smart-contract:

  1. Observabilidade, ou a habilidade de verificar se os outros cumpriram sua parte do contrato; e de provar aos outros que cumpriu a sua.
  2. Verificabilidade, ou a habilidade de se provar a um terceiro que um contrato foi cumprido ou quebrado, ou a habilidade de um terceiro específico de descobri-lo por outros meios. Esses terceiros podem ser, por exemplos, juízes ou fiscais.
  3. Privacidade, ou a ideia de que conhecimento e controle sobre o conteúdo e a execução do contrato devem ser distribuídos apenas na medida em que seja necessário para a execução do contrato.

A implementação efetiva dos três conceitos apresenta uma série de desafios. Szabo, no entanto, argumenta que já temos soluções para esses desafios, provindas do mundo da criptografia. Veremos adiante porque se pode dizer que Ethereum é a primeira implementação do conceito de smart-contract.

Conceitos técnicos

Peer-to-peer

Fundamental para o entendimento de smart-contracts e tecnologias baseadas em blockchain é o conceito de redes peer-to-peer (P2P). Essa arquitetura pode ser entendida em oposição ao conceito tradicional de cliente/servidor, em que os usuários do serviço (clientes) fazem requisições a um servidor, que unilateralmente provê o serviço. Esse modelo clássico é o que fundamenta a maior parte dos serviços mais conhecidos da Internet. Por exemplo, cada vez que se faz uma pesquisa em algum motor de busca, as palavras pesquisadas são enviadas a um servidor (propriedade da empresa que é dona do motor de busca), que então retorna os resultados da pesquisa para o seu computador. Do outro lado, existem as redes P2P, que são completamente descentralizadas. Nas palavras de Rüdiger Schollmeier,

Uma arquitetura de rede distribuída pode ser dita uma rede Peer-to-Peer (P-to-P, P2P, …) se os participantes compartilham parte de seus próprios recursos […]. Esses recursos compartilhados são necessários para que se forneça o serviço e conteúdo oferecidos pela rede (e.g. compartilhamento de arquivos ou espaços de trabalho compartilhados). São acessíveis por outros peers diretamente, sem a passagem por entidades intermediárias. Os participantes dessa rede são, então, ao mesmo tempo, provedores e solicitantes de recursos (Serviço e conteúdo). (Schollmeier 2002)

É possível visualizar uma rede do tipo como um telefone sem-fio, em rede, formado por computadores, com a diferença de que as informações não são perdidas.

Por sua generalidade, a definição abrange uma grande diversidade de possíveis aplicações. Uma das mais notórias talvez seja o protocolo BitTorrent. Usando conexões simétricas entre peers, BitTorrent possibilita distribuição de mídia de maneira completamente descentralizada (Cohen 2017). Protocolos P2P mediam grande parte das conexões na Internet, tendo chegado a representar até 70% de todo o tráfego da rede (Schulze and Mochalski 2009).

Um exemplo simples de aplicação P2P é um fórum público que não registra a ordem das mensagens. Cada participante da rede que deseje publicar uma mensagem deve assiná-la digitalmente e enviá-la aos peers a quem esteja conectado. Esses, por sua vez, a enviam para seus peers vizinhos, e assim por diante, até que todos os participantes estejam cientes dessa mensagem. Note que, por virtude da forma da rede, é possível que diferentes peers recebam mensagens em ordens diferentes. Assim, esse sistema apenas garante o conteúdo das mensagens (por estarem assinadas), e não o seu timing.

Funções hash

No coração do protocolo blockchain vive o conceito de função hash. Apesar de um tanto técnico, é ilustrativo de como soluções criptográficas possuem características úteis no desenvolvimento de smart-contracts (e outras aplicações que envolvem comunicação).

Funções hash podem ser pensadas como um funil. Pela parte de cima, entram quantidades arbitrariamente grandes de dados. Por baixo, “cospem” um texto que parece aleatório, mas que carrega informação sobre a entrada.

Table 1: Exemplos de hash de alguns valores.

Funções hash contam com duas propriedades fundamentais:

  1. São unidirecionais. É muito fácil (para um computador) calcular a hash de uma entrada específica. Por outro lado, é inviável descobrir um valor dado a sua hash — a única forma é por tentativa e erro, o que é
  2. É sensível a pequenas mudanças. Como está exemplificado pelas duas últimas linhas da tabela, pequenas mudanças na entrada (no caso, apenas uma letra) geram saídas completamente distintas.

Essas duas propriedades garantem uma espécie de detecção de modificações. Se alguém possui a hash de um arquivo específico, mas não o arquivo em si, pode verificar se alguma pretensa cópia do arquivo original é de fato uma cópia, ou não. Isso virá a ser importante mais para frente.

Implementação

Argumentavelmente, a mais notória plataforma de smart-contracts é a blockchain Ethereum. Por isso, exploraremos seu funcionamento mais a fundo.

Em geral, uma blockchain pode ser considerada um livro razão público. A todo instante, existem contas com balanços, e transações pode ser emitidas que modifiquem esses balanços (note, no entanto, que apesar de dizermos “balanço”, não necessariamente as informações armazenadas são monetárias). Todos os participantes da rede podem emitir essas transações, e cada tipo de transação pode requerer certas condições para ser válida (e.g., no caso de uma transação monetária, (1) o emissor da mensagem deve ser o dono da conta de origem, que por sua vez (2) deve conter no mínimo a quantidade transferida).

Imagem 1: (“Transação Como Transição de Estado,” n.d.)

Num sistema centralizado (i.e., com uma autoridade confiável que gere o funcionamento do sistema), a implementação de algo do tipo é fácil: cada participante pode enviar suas transações à essa autoridade, que por sua vez verifica a validade da transação (e pode fazer isso pois tem acesso à base de dados centralizada). Se for o caso, modifica o estado do sistema adicionando essa transação à lista global de transações.

Mas em um sistema descentralizado, como a Ethereum, isso não é possível. Na falta de uma autoridade central, os peers precisam ser capazes de concordar entre si sobre quais transações são ou não válidas. É preciso um protocolo que permita que uma transação possa ser validada por qualquerparticipante do sistema; é preciso um protocolo que implemente consenso — esse protocolo é chamado blockchain.

Mas blockchain é uma tecnologia razoavelmente genérica. Você pode notar que não foi especificado qual o caráter dessas transações. De fato, elas podem ser dos tipos mais variados. No caso de Bitcoin, uma transação apenas contém informação de quais moedas serão enviadas a que endereço; e a transação toda é assinada criptograficamente pelo proprietário das moedas (Nakamoto 2008). Outras blockchains podem ter outros tipo de transações. Ethereum, especificamente, utiliza um tipo particularmente flexível de transações, que permite programas de complexidade arbitrária determinem a transição de estado — esses programas são chamados smart-contracts.

A seguir, exploraremos mais a fundo os dois conceitos importante introduzidos acima: como blockchain é capaz de criar consenso, e como smart-contracts pode ser vistos como parte de transições de estado.

Blockchain

Blockchain, resumidamente, pode ser dita uma base de dados peer-to-peeronde é necessário consenso para adição de informações. Para tanto, as entradas da base de dados estão contidas em uma sequência de blocos que guardam também uma referência criptográfica ao bloco anterior. A adição de um bloco se dá através da mineração, quando certos participantes da rede denominados mineradores tentam validar um candidato a bloco gerando provas do gasto de algum recurso associado a ele.

Consenso

O problema fundamental que o protocolo busca resolver é aquele de consenso descentralizado. Como pode um conjunto de peers chegar a um acordo quando uns não tem total informação nem contato com outros? Como se pode provar que uma dada transação seja válida? Como veremos a seguir, esse processo se dá pela associação à validação de uma transação com o gasto de recursos. Isso pode ser pouco intuitivo, pois a princípio parece despropositado, mas afinal veremos que é exatamente isso que garante o funcionamento da rede.

  1. Novas transações são transmitidas.Peers interessados na criação de uma nova transação (g., se desejam transferir moedas para outro) a geram e enviam a seus peers vizinhos, que a distribuem.
  2. Mineradores coletam as transações e formam um novo bloco candidato.Nós interessados em gerar um novo bloco coletam as transações que receberam e a agregam em uma lista, conhecida como bloco, acompanhadas da hash do bloco anterior.
  3. Cada minerador trabalha no bloco que criou.Nesse passo, recursos são gastos com o objetivo de validar o bloco candidato. Esse processo pode se dar de diversas formas. No caso do Bitcoin, cada minerador busca resolver um desafio computacional difícil (pense em Sudoku, por exemplo); a solução do desafio demonstra que o minerador teve de trabalhar (e portanto gastar recursos). Note que cada conjunto de transações gera um desafio específico (como se gerassem os números iniciais no Sudoku, por exemplo), então não é possível resolver o desafio antes de coletar as transações.
  4. Um minerador que consiga validar seu bloco, o publica.Uma vez gerada a prova do gasto de recursos, tal prova é anexada ao bloco, que é então publicado e recebido pelos outros participantes da rede.
  5. Todo nó participante recebe o novo bloco e o valida.A validação se dá pela verificação de que cada transação do bloco, e a prova de gastos de recursos, são válidos. Assim, as transações de fato representam transições de estado válidas e o nó sabe que recursos foram gastos nesse bloco. Para estender a comparação anterior, é como se cada nó verificasse que a solução do Sudoku é válida. Perceba que é muito mais fácil verificar uma solução de um Sudoku do que encontrar uma.
  6. Mineradores expressam sua aprovação do bloco ao trabalhar no próximo bloco na sequência.Veremos a relevância desse ponto mais adiante. (Lista adaptada de (Nakamoto 2008)).

É possível que, no passo 4, dois mineradores criem blocos distintos no mesmo momento. Isso gera uma bifurcação na blockchain. A solução é simples. Existe um critério de verdade: a versão verdadeira da cadeia é a versão mais longa. É aqui que de fato se cria o consenso. Parte dos nós trabalhara em cada versão da história; a primeira versão que seja estendida (pela criação de mais um bloco) será mais longa, e então será considerada verdadeira. A probabilidade de em vezes sucessivas sejam criados blocos simultâneos diminui com a passagem do tempo, então alguma versão acaba vencendo.

Imagem 2: Um atacante (no centro) trabalha numa versão alternativa da Blockchain. O resto da rede trabalha na história verdadeira (a cadeia mais longa). Para alcançar em algum momento o resto da rede, o atacante precisa de mais recursos do que o resto da rede.

Juntando tudo: análise de funcionamento

Porque o protocolo que vimos na seção anterior gera consenso e garante a integridade dos dados (i.e., garante que não existam versões alternativas do estado do sistema, que não se possa alterar o passado)?

Há três aspectos do sistema que respondem a essas perguntas. Em primeiro lugar, temos a estrutura de blocos. Como cada bloco contém, além das transações, uma referência criptográfica ao bloco anterior — a hash — , não é possível alterar uma transação em particular sem que seja necessário alterar toda a história do sistema a partir desse ponto. Isto é, caso se crie uma bifurcação em algum ponto da cadeia, é necessário também revalidar todos os blocos que seguem. Caso isso não seja feito, essa bifurcação será de fato mais curta que a cadeia principal, e então não é considerada válida.

Aqui entra o segundo ponto: o protocolo de prova. O minerador que deseje criar uma história alternativa deve gastar recursos para validar essa versão. Porém, todos os outros mineradores continuarão trabalhando na outra versão da história do sistema; exatamente por causa do terceiro ponto: o critério de verdade. A versão verdadeira da blockchain é a cadeia mais longa. Então aquele que deseje re-escrever o histórico de transações deve possuir mais recursos que o resto da rede. Como corolário, deve possuir mais de 50% dos recursos da rede para ter sucesso, e, caso suceda, gastará tantos recursos que de um ponto de vista econômico o ataque não valerá a pena

Contratos

Paralelamente à teoria de Szabo, pode-se dizer que a primeira implementação do conceito de smart-contracts seja a blockchain Ethereum.

Por um lado, o estado da Ethereum é composto de um conjunto de contas. Há dois tipos: contas controladas por humanos (as contas externas), e contas controladas por código (ou contratuais). Ambas possuem um balanço — a quantidade de moedas que possuem — mas contas contratuais também possuem um programa que descreve o seu comportamento.

Do outro lado, as transações da Ethereum tem a forma de mensagens. Mensagens podem ser enviadas de contas externas a contas contratuais, ou entre contas contratuais. Carregam uma quantidade de moedas, além de informação arbitrária que pode ser acessada pelo código das contas contratuais de destino.

Cada vez que uma conta recebe uma mensagem, seu código é executado, e há algum efeito do estado do sistema. Essa é a generalidade que permite que se implemente a ideia de smart-contracts.

Então, em conclusão, o que pode ser dito é que um smart-contract da Ethereum é apenas um programa permanentemente registrado numa blockchain, com o qual qualquer usuário pode interagir.

Aplicações dos smart-contracts da Ethereum

Tokens

A primeira, e talvez mais óbvia aplicação de smart-contracts é a criação de tokens negociáveis. Esses variam “desde sub-moedas representando ativos como o dólar ou ouro até ações de empresas, tokens individuais representando smart-property, cupons seguros que não podem ser falsificados, e até sistemas de tokens sem relação alguma com valor convencional, usado como sistemas de pontos para incentivos” (Buterin 2014).

A implementação de um sistema do tipo é surpreendentemente simples. A lógica do programa contido no contrato pode ser resumida assim:

“Se o remetente da mensagem possui moedas suficientes, retire essa quantidade de sua conta e adicione à conta de destino.”

DApps & DAOs

Uma proposta, talvez ousada, é a criação das chamadas organizações autonomas descentralizadas (DAO, na sigla em inglês) e dos aplicativos descentralizados (DApps). Elas permitem, através de regras implementadas em um smart-contract, que recursos e contratos sejam geridos de forma descentralizada. Todos os participantes podem criar e votar em propostas, e o processo todo ocorre de forma automática. Um exemplo que já está em funcionamento é o Arcade City, um sistema pelo qual motoristas podem formar cooperativas descentralizadas, e dessa forma prover serviços de transporte sem a intermediação de uma empresa. Nesse sentido, poderia ser chamado de “Uber sem a Uber”.

  • Bibliografia

Buterin, Vitalik. 2014. “A next-Generation Smart Contract and Decentralized Application Platform.” GitHub. 2014. https://github. com/ethereum/wiki/wiki/White-Paper.

Cohen, Bram. 2017. “The BitTorrent Protocol Specification.” Bittorrent.org. February 4, 2017. http://www.bittorrent.org/beps/bep_0003.html.

Nakamoto, Satoshi. 2008. “Bitcoin: A Peer-to-Peer Electronic Cash System.”https://bitcoin.org/bitcoin.pdf.

“Napster — Wikipedia.” 2018. Wikipedia. May 12, 2018.https://en.wikipedia.org/wiki/Napster.

Schollmeier, Rüdiger. 2002. “A Definition of Peer-to-Peer Networking for the Classification of Peer-to-Peer Architectures and Applications.” In Proceedings First International Conference on Peer-to-Peer Computing. https://doi.org/10.1109/p2p.2001.990434.

Schulze, Hendrik, and Klaus Mochalski. 2009. “Internet Study 2008/2009.”Ipoque Report 37: 351–62.

Siegel, David. 2016. “Understanding The DAO Hack for Journalists — David Siegel — Medium.” Medium. Medium. June 19, 2016.https://medium.com/@pullnews/understanding-the-dao-hack-for-journalists-2312dd43e993.

Szabo, Nick. 1997. “Formalizing and Securing Relationships on Public Networks.” First Monday 2 (9). https://doi.org/10.5210/fm.v2i9.548.

“Transação Como Transição de Estado.” n.d. Ethereum.https://raw.githubusercontent.com/ethereumbuilders/GitBook/master/en/vitalik-diagrams/statetransition.png.

 

Por Juan Meleiro

Fonte: https://www.lexmachinae.com/2018/05/22/smart-contracts-teoria-pratica/

Comentários

Comentários