Em diversos cenários de projetos web3 nossos smart contracts acabam precisando de dados externos, do mundo real, como cotações de moedas fiat, resultados de partidas esportivas e o clima na sua cidade. No entanto, smart contracts não podem acessar dados externos à blockchain em virtude da natureza determinística atemporal de sua execução, visando garantir sua integridade e que possa ser revalidada a qualquer momento, obtendo sempre o mesmo resultado. Mas o que fazer então nestes cenários que dependem de dados de APIs, por exemplo?
É aí que entram os blockchain oracles!
No artigo de hoje eu quero explicar o que são, para que servem e como funcionam os blockchain oracles no contexto de smart contracts. Para conseguir acompanhar este artigo é necessário que você tenha conhecimentos básicos sobre blockchain, que podem ser obtidos aqui.
Vamos lá!
#1 – Por que smart contracts não podem acessar dados externos?
Os contratos inteligentes são programas autônomos executados em uma blockchain. Eles são projetados para serem determinísticos e autocontidos, o que significa que sua execução e resultados são previsíveis e não dependem de fatores externos. Essa é uma das primeiras coisas que aprendemos quando estudamos o desenvolvimento de smart contracts.
Existem algumas razões pelas quais os contratos inteligentes têm dificuldade em acessar dados externos e elas vão muito além de qualquer limitação da linguagem de programação, como o Solidity, realmente é uma decisão de design que fica mais clara quando lembramos que a segurança é uma prioridade fundamental em blockchain. Os contratos inteligentes são projetados para serem seguros e confiáveis, garantindo que as transações sejam executadas conforme programado, sem manipulação ou interferência externa. A introdução de dados externos diretamente em contratos inteligentes pode representar riscos de segurança, pois esses dados podem ser manipulados ou falsificados, comprometendo a integridade dos contratos, sem contar que atrapalharia a verificação da validade da rede como um todo, já que ela é descentralizada e os mineradores/validadores concorrem por alterá-la o tempo todo.
Imagine por exemplo que o contrato A pudesse consumir a API do site x para pegar um dado y. Quando Joãozinho executasse o contrato às 19h50 de uma quarta-feira, o contrato A coletaria o dado no site x e usaria o mesmo para fazer um cálculo, gerando um novo registro/estado na blockchain. Esse novo registro seria propagado pela blockchain, o que poderia levar de minutos a hora. Quando o novo bloco chegasse em um minerador do outro lado do mundo, vários minutos ou horas depois, e ele fosse repetir a transação para poder validar o bloco e incorporar na cópia local do seu nó, o site x poderia fornecer outro dado através da sua API e com isso o bloco seria recusado. Isso só para citar um exemplo de problema que afetaria o determinismo da blockchain por causa do acesso à dados externos.
Mesmo que os contratos inteligentes pudessem acessar dados externos, ainda haveria o desafio do “Oracle Problem“. Isso se refere à questão de como garantir que os dados externos fornecidos aos contratos sejam precisos, confiáveis e imunes a manipulação. A confiabilidade dos dados externos é crucial para garantir a execução correta dos contratos inteligentes e evitar resultados indesejados. Ainda assim, os oráculos servem como solução parcial ou razoável para esse problema, a melhor que temos no momento. Essa abordagem ajuda a garantir que os contratos inteligentes possam interagir com o mundo externo de forma segura e confiável dentro de limites aceitáveis.
Falaremos mais deles a seguir.
#2 – O que são blockchain oracles?
Resumidamente, os oráculos blockchain são sistemas que fornecem dados externos para contratos inteligentes em uma rede blockchain. Como os smart contracts são autônomos e executados na blockchain, eles geralmente não têm acesso direto a informações externas, como preços de ativos, resultados de eventos do mundo real ou dados meteorológicos. Os oráculos atuam como intermediários, fornecendo essas informações externas para os contratos inteligentes, permitindo que eles tomem decisões e executem ações com base em dados do mundo real.
Alguns oráculos são centralizados, o que significa que uma entidade controla e fornece os dados externos. Outros oráculos são descentralizados, usando uma rede de provedores de dados para garantir a integridade e a precisão dos dados fornecidos. Independente da topologia, os oráculos blockchain são cruciais para expandir a utilidade dos smart contracts, permitindo que eles interajam com o mundo externo de maneira confiável e segura.
No entanto, é importante garantir que os oráculos sejam confiáveis e seguros para evitar manipulação ou fornecimento de dados falsos, o que poderia comprometer a integridade e a segurança dos contratos inteligentes. E isso está diretamente associado a como eles funcionam.
#3 – Como funcionam blockchain oracles?
Existem diferentes formas de funcionam, mas geralmente operam com estas etapas:
- Coleta de Dados Externos: o primeiro passo é coletar dados externos do mundo real, o que é feito através de uma aplicação offchain. Isso pode incluir uma ampla gama de informações, como preços de ativos, resultados de eventos esportivos, condições meteorológicas, registros de votos, entre outros. Essa coleta geralmente é feita através de APIs de entidades confiáveis. Por exemplo, dados metereológicos podem ser obtidos em institutos específicos via API.
- Verificação e Autenticação: após coletar os dados externos, os oráculos podem verificar e autenticar esses dados para garantir sua precisão e integridade. Isso pode envolver o uso de várias técnicas, como assinaturas digitais, criptografia ou consultas a várias fontes de dados de entidades diferentes para confirmar a validade das informações. Por exemplo, resultados esportivos podem ser obtidos em vários portais de notícias do segmento, de empresas diferentes.
- Incorporação na Blockchain: uma vez verificados, os dados externos são incorporados à blockchain, onde podem ser acessados pelos smart contracts. Os oráculos usam de transações em contratos que esperam pelos dados (do próprio oráculo ou de um cliente) e que mais tarde serão usados por outros contratos para consulta.
- Atualização Regular: em muitos casos, os dados externos estão sujeitos a mudanças frequentes. Portanto, os oráculos podem ser projetados para atualizar regularmente esses dados na blockchain, garantindo que os contratos inteligentes tenham acesso às informações mais recentes. Por exemplo, a cotação de um ativo financeiro normalmente varia algumas vezes dentro do período de 1h.
- Garantia de Segurança e Confiança: é crucial que os oráculos garantam a segurança e a confiabilidade dos dados fornecidos aos contratos inteligentes. Isso pode envolver a implementação de medidas de segurança robustas, como criptografia, autenticação e monitoramento constante para detectar qualquer tentativa de manipulação ou adulteração dos dados. Enquanto que em um oráculo particular elas podem ser mais específicas e fáceis de implementar (como controle de acesso), em oráculos públicos a coisa pode ser mais complexa.
- Mecanismos de Consenso: em oráculos descentralizados, onde várias fontes de dados são usadas para garantir a precisão, podem ser implementados mecanismos de consenso para reconciliar discrepâncias entre as diferentes fontes de dados.
Em resumo, um agente externo (offchain) coleta e verifica os dados com a regularidade necessária e injeta eles em um smart contract para que o dado passe a existir na blockchain. Nem todos oráculos terão todas essas etapas ou controles e alguns até mesmo trabalharão sob demanda, sem uma recorrência de funcionamento. Como assim?
![Curso Beholder](https://www.luiztools.com.br/wp-content/uploads/2021/05/banner-beholder.jpg)
#4 – Arquitetura de Oráculos
Temos duas arquiteturas dominantes quando o assunto é implementação de oráculos: Storage Oracle ou Request-Response Oracle.
Storage Oracle
Esse é o modelo mais clássico: de tempos em tempos um agente externo atualiza um smart contract do oráculo que será acessado por smart contracts consumidores, bem nos models que apresentamos no tópico anterior. A vantagem deste modelo é que o dado se mantém atualizado constantemente e o acesso é imediato. A desvantagem é o custo associado às transações recorrentes do oráculo, mesmo quando o dado fica ocioso e sem demanda atual. Assim, esse tipo de oráculo é interessante nos cenários de alta demanda por um dado específico, pois uma transação do oráculo irá beneficiar muitos consumidores.
Request-Response Oracle
Neste modelo o oráculo coleta e fornece o dado sob demanda e é bem mais complexo de ser implementado que no modelo anterior.
Imagine que o contrato A precisa de um dado B, ele faz uma transação para o oráculo registrando seu pedido. Um agente externo que monitora eventos do oráculo (seja fazendo polling ou através de websockets) recebe essa requisição, coleta e valida os dados e então registra no oráculo a resposta da consulta, o que executará uma função de callback ou evento que por sua vez servirá de aviso ao contrato A de que seu dado está pronto.
Assim, o oráculo somente faz todo seu processo, incluindo transações, quando o dado realmente é necessário, gerando um processo mais lento mas ao mesmo tempo mais econômico, ideal para dados com pouca demanda ou que não atualizam com tanta frequência, já que podem ser implementados mecanismos de cache que reaproveitem respostas entre requisições, mas aqui já estaríamos entrando em subimplementações mais específicas.
E com isso terminamos este rápido estudo sobre blockchain oracles. Espero ter trazido um pouco de luz sobre o assunto e em outra oportunidade desejo trazer exemplos práticos de implementação e consumo.
Até a próxima!
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.