- Desenvolvimento de Software
Eu tenho me dedicado ao estudo de blockchain desde 2018. Meu trabalho de conclusão da Graduação em Sistemas da Informação (Unisinos, 2018) foi sobre o tema e nele explorei o PEM4BLOCKEHR: Um Modelo de Avaliação de Desempenho do Blockchain aplicado a Prontuários Eletrônicos.
Na edição do The Developer’s Conference (TDC) 2019, que aconteceu em Porto Alegre, pude abordar o blockchain sob outro viés, e falei aos presentes sobre como Consultar dados da Blockchain Ethereum usando o The Graph. O artigo a seguir tem sua origem nessa palestra, que foi também tema de um SoftDrops* que apresentei, recentemente, para os colaboradores da SoftDesign.
Se você é iniciante no tema de blockchain, recomendo que antes de ler esse artigo, leia esse texto. Qualquer dúvida, estou à disposição.
O The Graph possibilita a consulta de dados difíceis ou impossíveis de executar diretamente na blockchain.
“Ele é um protocolo descentralizado para indexar e consultar dados de blockchains. Permite, assim, a construção de dApps mais facilmente no Ethereum e IPFS usando o GraphQL.”
(Yaniv Tal, Project Lead at The Graph)
Por exemplo, com o popular aplicativo descentralizado CryptoKitties¹ que implementa o padrão ERC-721 Non-Fungible Token (NFT)², é relativamente simples fazer as seguintes perguntas: quantos CryptoKitties possui uma conta específica do Ethereum? Quando um determinado CryptoKitty nasceu?
Esses padrões de leitura são diretamente suportados pelos métodos expostos no contrato: os métodos balanceOf e getKitty para esses dois exemplos. No entanto, outras perguntas são mais difíceis de responder: quem são os proprietários dos CryptoKitties nascidos entre janeiro e fevereiro de 2018?
Para responder a essa pergunta, é necessário processar todos os eventos de nascimento (Birth events) e, em seguida, chamar o método ownerOf para cada CryptoKitty que nasceu. Sem o The Graph, tal processamento demoraria horas ou até dias para obter uma resposta, ou seja, para que uma aplicação descentralizada (dApp) em execução em um navegador obtivesse uma resposta.
Sendo assim, podemos entender o The Gaph como:
“Uma ferramenta com foco na camada de dados das aplicações descentralizadas, com o objetivo de tornar os dados mais acessíveis.” (Yaniv Tal, Project Lead at The Graph)
1. A indexação dos dados da blockchain é difícil: as propriedades da blockchain, como finalidade³, reorganizações da cadeia ou blocos não fechados, complicam ainda mais esse processo e tornam, não apenas demorado, mas conceitualmente difícil recuperar os resultados corretos da consulta dos dados da blockchain.
2. Dados armazenados sem padrão: enquanto blockchains e redes de armazenamento são componentes críticos da pilha, os dados raramente são armazenados em um formato que pode ser consumido diretamente nos aplicativos. Os aplicativos precisam filtrar, classificar, paginar, agrupar e associar dados antes que eles possam ser buscados.
3. Servidores de indexação centralizados: hoje, as equipes estão contornando essa lacuna de funcionalidade criando servidores de indexação centralizados. Esses servidores extraem dados do Ethereum, os armazenam em um banco de dados e os expõem por uma API. Isso é frágil, pois os usuários precisam confiar nessas equipes para continuar operando esses servidores corretamente. Os projetos podem falir, modificar os dados por razões estratégicas, serem adquiridos ou simplesmente cometer erros.
As aplicações descentralizadas (dApps) precisam obter e transformar dados de fontes de dados subjacentes. O IPFS, por exemplo, fornece armazenamento barato e o Ethereum permite transações atômicas, mas os dados raramente são armazenados em um formato que você pode consumir diretamente em seus aplicativos. O The Graph resolve esse problema fornecendo uma implementação de nó de código aberto, Graph Node, que lida com a indexação e o cache de dados de blockchain.
Usando o The Graph, os desenvolvedores podem consultar uma rede peer-to-peer (P2P) de nós de indexação usando o GraphQL e verificar os resultados no cliente. Isso permitirá que as equipes se concentrem na funcionalidade principal de seus dApps. Eles poderão implantar em infraestrutura pública confiável que não precisam gerenciar e se beneficiar de economias de escala.
1. Ethereum: é uma plataforma global de código aberto construída sobre a tecnologia blockchain que permite a construção de aplicativos descentralizados (ou “dApps”). Lançada em 2015, ela é a principal blockchain programável, o que significa que os desenvolvedores podem usá-la para criar novos tipos de aplicativos. Assim como outras blockchain, o Ethereum possui uma criptomoeda nativa chamada de Ether (ETH). Essa possui muitos dos mesmos recursos do Bitcoin, ou seja, é puramente digital, pode ser enviada para qualquer pessoa em qualquer lugar do mundo, é descentralizada e escassa, e não possui nenhuma empresa ou governo controlando seu fornecimento. Diversas pessoas no mundo usam a Ether para fazer pagamentos, como reserva de valor ou como garantia.
2. IPFS: o IPFS é um sistema de arquivos distribuído para armazenar e acessar arquivos, sites, aplicativos e dados. Um caso de uso comum para combinar o IPFS com o Ethereum é armazenar dados no IPFS, que seriam muito caros para manter em cadeia, e fazer referência ao hash do IPFS nos contratos do Ethereum.
3. dApps – Decentralized Applications: são aplicações que funcionam em uma rede peer-to-peer (P2P) descentralizada, possuem código aberto e operam de forma autônoma, independente de autoridades centrais. Os aplicativos descentralizados são construídos através dos Smart Contracts, que correspondem ao recurso onde as regras de negócio de cada aplicativo são implementadas. Posteriormente, os Smart Contracts são enviados ao Ethereum, o que significa que eles serão executados conforme programados tornando as aplicações confiáveis – já que os Smart Contracts são imutáveis, ou seja, uma vez implantados na rede Ethereum eles não podem ser modificados. Além de garantir os benefícios da tecnologia de criptomoeda e blockchain, os dApps podem controlar ativos digitais para criar novos tipos de aplicativos financeiros descentralizados, o que significa que nenhuma entidade ou governo os controla. Aplicativos descentralizados (dApps) colocam os usuários no controle de seus dados. Os dApps são criados usando dados pertencentes e gerenciados pela comunidade ou privados e controlados pelo usuário. Dessa forma, muitos produtos e serviços podem ser criados em conjuntos de dados conectáveis e os usuários podem alternar livremente entre dApps.
4. GraphQL: o GraphQL é uma linguagem de consulta para sua API em tempo de execução do lado do servidor – ele é usado para executar consultas com um sistema de tipos que você define para seus dados. O GraphQL não está vinculado a nenhum banco de dados ou mecanismo de armazenamento específico e, em vez disso, é apoiado por seu código e dados existentes. O The Graph usa o GraphQL, uma linguagem de consulta desenvolvida e de código aberto pelo Facebook. Ele fornece uma API poderosa para obter exatamente os dados necessários em uma única solicitação, atravessando e combinando fontes de dados sem problemas.
De forma geral, dizemos que o The Graph aprende ‘o que e como indexar’ os dados do Ethereum com base nas descrições definidas em subgráficos, conhecidas como manifesto do subgráfico. Essas descrições de um subgráfico indicam quais são os eventos dos Smart Contracts relevantes, e como mapear os dados dos eventos para a estrutura de dados que o The Graph armazenará em seu banco de dados.
O diagrama abaixo fornece uma visão sobre o fluxo de dados depois que um manifesto de subgráfico foi implantado, lidando com transações do Ethereum:
*O SoftDrops é um evento de troca de conhecimento que acontece todas as quartas-feiras, na sede da SoftDesign. A cada semana, um colaborador se predispõe a expor para os colegas algum tema de seu interesse, que tenha relação com os três pilares do nosso negócio: design, agilidade e tecnologia. A minipalestra dura em torno de trinta minutos e é seguida por um bate-papo entre os participantes
¹O que é o CryptoKitties?
É um jogo desenvolvido sobre a plataforma blockchain Ethereum, que permite que os jogadores possam comprar, coletar, criar e vender gatos virtuais. Ele é um jogo centrado em criaturas reproduzíveis e colecionáveis em que cada gato é único e pertence 100% a você, não pode ser replicado, retirado ou destruído. Esse jogo é implementado sobre o padrão ERC-721 Non-Fungible Token (NFT)²;
²O que é o ERC-721?
O ERC-721 é um padrão aberto e gratuito que descreve como criar tokens não fungíveis ou exclusivos na blockchain Ethereum. Enquanto a maioria dos tokens é fungível (cada token é igual a todos os outros tokens), os tokens ERC-721 são todos exclusivos. Pense neles como objetos de coleção raros e únicos.
O ERC-721 define uma interface mínima que um contrato inteligente deve implementar para permitir que tokens exclusivos sejam gerenciados, possuídos e negociados. Ele não exige um padrão para metadados de token ou restringe a adição de funções suplementares.
³Finalidade
Na configuração da blockchain, finalidade é a afirmação de que todos os blocos bem formados não serão revogados uma vez comprometidos com a blockchain.
TheGraph.com
Github – graph protocol
Medium – Yaniv Tal
Medium – Graph Protocol
GraphQL
Ethereum
IPFS
CryptoKitties
Dapp – CryptoKitties