Muito parecido com as palavras "blockchain", "AI" e "nuvem", "contrato inteligente" é uma daquelas frases que ganharam muito hype.
Afinal, o que pode ser melhor do que confiar no que vai acontecer em vez de usar o sistema judicial? As promessas dos contratos inteligentes incluem:
- Fazer cumprir contratos automaticamente de forma imparcial, sem precisar confiar em alguém
- Retirar os intermediários do processo de construção do contrato, execução do contrato e cumprimento do contrato
- (Por implicação) Remover os advogados
Eu simpatizo com o hype. Afinal, quão mais eficientes as coisas poderiam ser se pudéssemos simplesmente remover a necessidade de confiar na outra parte para executar acordos?
O que diabos é um contrato inteligente, afinal? E não é esse o domínio do Ethereum? Não é este o caminho do futuro? Por que você ficaria no caminho do progresso?
Neste artigo, examinarei o que são os contratos inteligentes e a realidade de engenharia que o acompanha (spoiler: não é tão simples e muito difícil de proteger).
O que é um contrato inteligente?
Um contrato normal é um acordo entre duas ou mais partes que os vincula a algo no futuro. Alice pode pagar a Bob algum dinheiro em troca do uso da casa de Bob (também conhecido como aluguel). Charlie pode concordar em reparar qualquer dano ao carro de Denise no futuro em troca de um pagamento mensal (também conhecido como seguro de carro).
O que é diferente em um contrato "inteligente" é que as condições são avaliadas e executadas por código de computador, tornando-o em algo que não exige a confiança de ninguém (trustless). Então, se Alice concordar em pagar a Bob $500 por um sofá para entrega daqui a 3 meses, algum código pode determinar se as condições são verdadeiras (Alice pagou a Bob? Já faz 3 meses?) e executar (entregar o sofá do depósito) sem dar a nenhuma das partes a capacidade de recuar.
A principal característica de um contrato inteligente é que ele possui uma execução que não depende de confiança. Ou seja, você não precisa depender de terceiros para executar várias condições. Em vez de confiar na outra parte para cumprir sua palavra ou, pior ainda, confiar em advogados e no sistema jurídico para remediar as coisas, caso algo dê errado, um contrato inteligente executa o que deveria acontecer de forma oportuna e objetiva.
Contratos inteligentes são bem burros
O uso da palavra “inteligente” implica que esses contratos possuem alguma inteligência inata. Eles não possuem. A parte inteligente do contrato é não precisar da cooperação da outra parte para executar o contrato. Em vez de ter que expulsar os locatários que não pagam o aluguel, um contrato "inteligente" bloquearia a entrada dos inquilinos que não pagaram no apartamento. A execução das consequências acordadas é o que torna os contratos inteligentes poderosos, e não a suposta inteligência inata dos contratos.
Um contrato verdadeiramente inteligente levaria em conta todas as circunstâncias extenuantes, observaria o espírito do contrato e faria julgamentos justos mesmo nas circunstâncias mais obscuras. Em outras palavras, um contrato realmente inteligente agiria como um bom juiz. Em vez disso, um “contrato inteligente” neste contexto não é inteligente em seu todo. Na verdade, ele é muito baseado em regras que segue à risca e não pode levar em consideração quaisquer considerações secundárias ou o "espírito" da lei.
Em outras palavras, fazer um contrato que não precisa de confiança significa que realmente não podemos ter espaço para ambiguidade, o que nos leva ao próximo problema.
Contratos inteligentes são realmente difíceis
Por causa de um monte de marketing centralizado do Ethereum, há uma crença equivocada de que os contratos inteligentes existem apenas no Ethereum. Isso não é verdade. O Bitcoin teve, desde o início em 2009, uma linguagem de contrato inteligente bastante extensa chamada Script. Na verdade, existiam contratos inteligentes antes do Bitcoin, em 1995. A diferença entre a linguagem de contrato inteligente do Bitcoin e a do Ethereum é que o Ethereum é Turing-complete. Ou seja, a Solidity (linguagem de contrato inteligente da ETH) permite contratos mais complicados, em detrimento de torná-los mais difíceis de analisar.
Para ser claro, contratos inteligentes existiam antes mesmo do Bitcoin, eu apenas gosto deste cartoon.
Existem algumas consequências significativas da complexidade. Embora contratos complexos possam permitir situações mais complicadas, um contrato complexo também é muito difícil de proteger. Mesmo em contratos normais, quanto mais complicado é o contrato, mais difícil é fazê-lo ser cumprido, pois as complicações acrescentam mais incerteza e espaço para interpretação. Com contratos inteligentes, a ideia de segurança significa lidar com todas as possibilidades que um contrato possa ser executado e garantir que o contrato cumpra o que os autores pretendem.
A execução em um contexto Turing-complete é extremamente complicada e difícil de analisar. Assegurar um contrato inteligente Turing-complete torna-se o equivalente a provar que um programa de computador não possui bugs. Sabemos que isso é muito difícil, já que quase todos os programas de computador existentes têm bugs.
Considere que escrever contratos normais com competência leva anos de estudo e um exame muito difícil. Os contratos inteligentes exigem pelo menos esse nível de competência e, no entanto, atualmente, muitos são escritos por novatos que não entendem o quão seguro eles precisam ser. Isto é muito claro a partir dos vários contratos que se mostraram falhos.
A solução do Bitcoin para este problema é simplesmente não ser Turing-complete. Isso facilita a análise dos contratos, pois os possíveis estados do programa são mais fáceis de enumerar e examinar.
A solução do Ethereum é colocar a carga do fardo sobre os programadores de contratos inteligentes. Cabe aos programadores certificar que o contrato faz o que se pretende.
Contratos inteligentes não são contratos de verdade (pelo menos no ETH)
Embora deixar a responsabilidade de tornar contratos seguros com os programadores seja boa em teoria, na prática, isso teve sérias consequências centralizadoras.
O Ethereum surgiu com a ideia de que "código é lei". Ou seja, um contrato no Ethereum é a autoridade final e ninguém pode anular o contrato. A ideia era deixar claro aos desenvolvedores de contratos inteligentes que eles estão por conta própria. Se você errou ao fazer seu próprio contrato inteligente, então, em certo sentido, você merece. Isso parou quando o evento do DAO aconteceu.
DAO significa “Organização Autônoma Descentralizada” e um fundo foi criado no Ethereum como uma maneira de mostrar o que a plataforma poderia fazer. Os usuários podiam depositar dinheiro no DAO e obter retornos com base nos investimentos que o DAO faria. As decisões em si seriam tomadas em coletivo e de forma descentralizada. O DAO arrecadou US$ 150 milhões em ETH quando o ETH estava sendo negociado por cerca de US$ 20. Tudo isso soou bem na teoria, mas havia um problema. O código não foi muito bem protegido e resultou em alguém descobrir uma maneira de drenar o dinheiro do DAO.
Muitos chamaram a pessoa que drenou os fundos do DAO de “hacker”. No sentido de que o “hacker” encontrou uma maneira de tirar dinheiro do contrato de uma forma não pretendida pelos criadores pretendidos, isso é verdade. Mas em um sentido mais amplo, essa pessoa ou grupo não era um hacker, apenas alguém que estava aproveitando as peculiaridades de um contrato inteligente para sua vantagem. Isso não é muito diferente de um criativo contador descobrir uma lacuna fiscal para economizar o dinheiro de seus clientes.
O que aconteceu depois é que o Ethereum decidiu que o código não era mais lei e reverteu todo o dinheiro que foi para o DAO. Em outras palavras, os programadores do contrato e os investidores fizeram algo estúpido e os desenvolvedores do Ethereum decidiram socorrê-los.
A ocorrência deste incidente está bem documentada. O Ethereum Classic nasceu, preservando o DAO como havia sido escrito e conservando o princípio de “código é lei”. Além disso, os desenvolvedores começaram a se afastar do uso da propriedade de Turing-complete do Ethereum, já que se provou ser difícil de proteger. Os padrões ERC20 e ERC721 são os modelos de contrato inteligente usados com mais frequência no Ethereum e é importante ressaltar que ambos os tipos de contratos podem ser escritos sem qualquer completude de Turing.
Contratos inteligentes funcionam somente com instrumentos digitais ao portador
Mesmo sem Turing-complete, a ideia de termos contratos inteligentes soa muito bem. Afinal, quem gosta de ter que ir a tribunal para conseguir algo que por direito lhes pertence de forma sem que precisemos confiar em alguém? Usar um contrato inteligente não é muito mais fácil do que os contratos normais?
Por exemplo, o setor imobiliário não seria beneficiado com os contratos inteligentes? Alice pode provar que ela é dona da casa. Bob pode mandar dinheiro para a casa e conseguir alugá-la por um tempo. Assim, não teríamos questões relativas à propriedade, não precisaríamos confiar em ninguém, teríamos uma execução rápida feita por uma máquina, sem necessidade de juízes, burocratas ou apólice de seguro. Parece incrível, certo?
Existem dois problemas aqui. O primeira é que a execução inteligente de contratos por uma parte centralizada não é realmente passível de abolir a confiança em alguém. Você ainda precisa confiar em uma parte centralizada para executar o acordo. A eliminação da necessidade da confiança é a característica principal, por isso a execução centralizada não faz sentido. Para que os contratos inteligentes realmente não precisem confiar em uma parte centralizada, você precisa de uma plataforma verdadeiramente descentralizada.
Isso nos leva ao segundo problema. Em um contexto descentralizado, os contratos inteligentes só funcionam se houver algum vínculo definitivo entre a versão digital e a versão física. Ou seja, sempre que a versão digital da casa altera a propriedade, a versão física também deve alterar a propriedade. Há uma necessidade de o mundo digital "conhecer" o mundo físico. Isso é conhecido como o "problema do Oráculo".
Quando Alice transfere a casa para Bob, o contrato inteligente precisa saber que ela transferiu a casa para Bob. Existem várias maneiras de se fazer isso, mas todas elas têm o mesmo problema essencial. Tem que haver alguma confiança em algum terceiro para verificar os eventos no mundo físico.
Por exemplo, a casa pode ser representada como um token não fungível no Ethereum. Alice poderia transferir a casa para Bob em uma troca atômica por alguma quantia de ETH. Aqui está o problema. Bob precisa confiar que o token realmente representa a casa. Tem que haver algum Oráculo que assegure que a transferência do token da casa para ele, na verdade, significa que a casa agora passa a ser dele legalmente.
Além disso, mesmo se uma autoridade governamental disser que o token realmente representa a casa, o que acontecerá se o token for roubado? A casa agora pertence ao ladrão? E se o token for perdido? A casa não está mais disponível para ser vendida? O token da casa pode ser reemitido? Se sim, por quem?
Existe um problema intratável em vincular um ativo digital a um ativo físico, seja frutas, carros ou casas, pelo menos em um contexto descentralizado. Os ativos físicos são regulados pela jurisdição em que você está e isso significa que eles confiam em algo além do contrato inteligente que você criou. Isso significa que a posse em um contrato inteligente não significa necessariamente posse no mundo real e sofre do mesmo problema de confiança dos contratos normais. Um contrato inteligente que confie em terceiros remove o recurso matador da possibilidade de não precisarmos confiar em alguém ou algo.
Até mesmo ativos digitais como ebooks, registros de saúde ou filmes sofrem do mesmo problema. Os “direitos” para esses ativos digitais são decididos por alguma outra autoridade e um Oráculo precisa ser confiável.
E sob esta luz, Oráculos são apenas versões simplificadas de juízes. Em vez de o acordo ser executado apenas pela máquina com aplicação do acordo simplificada, o que você realmente obtém é a complexidade de ter que codificar todos os resultados possíveis com a subjetividade e o risco do julgamento humano. Em outras palavras, ao tornar um contrato "inteligente", você o tornou mais complexo de escrever enquanto ainda precisa confiar em alguém.
As únicas coisas que podem funcionar sem um Oráculo são instrumentos digitais ao portador. Essencialmente, ambos os lados da transação não precisam apenas ser digitais, mas também instrumentos ao portadores. Ou seja, a propriedade do token não pode ter dependências fora da plataforma de contratação inteligente. Somente quando um contrato inteligente possui instrumentos de suporte digital ao portador, um contrato inteligente pode funcionar realmente sem a necessidade de confiarmos em algo ou alguém.
Conclusão
Eu desejo que os contratos inteligentes pudessem ser mais úteis do que realmente são. Infelizmente, muito do que nós, humanos, pensamos como contratos, traz um monte de suposições e jurisprudências estabelecidas que não precisam ser explicitamente declaradas.
Além disso, a utilização do conceito de Turing-complete é uma maneira fácil de estragar e causar todo tipo de comportamento não intencional. Devemos rotular plataformas de contrato inteligente Turing-vulnerável e não Turing-complete. O incidente do DAO também provou que há um "espírito" do contrato que é implicitamente confiável e ajuda a resolver disputas mais do que imaginamos.
Contratos inteligentes são simplesmente muito fáceis de serem estragados, muito difíceis de serem protegidos, muito difíceis de serem feitos sem a necessidade de confiarmos em uma terceira parte e de ter muitas dependências externas para trabalhar na maioria das coisas. O único lugar real onde os contratos inteligentes realmente adicionam a propriedade de não precisarmos confiar em uma terceira parte está em plataformas descentralizadas como o Bitcoin.
Obrigado a Michael Flaxman e Rigaut-Luczak Lola.
*Este artigo foi traduzido com a autorização do autor Jimmy Song. O artigo original em inglês pode ser encontrado aqui.