Já mencionei esse assunto em alguns posts passados, mas esse aqui vai ser especial para falar do ecossistema Ethereum. Diferente do que a maior parte da população acredita, o Ethereum não é simplesmente uma criptomoeda (na verdade, a moeda em si nem se chama Ethereum). Vou tentar explicar, de forma resumida, os pontos mais relevantes.

Vitalik Buterin

Basta fazer uma pesquisa rápida no Google para encontrar a história de Vitalik Buterin, um rapaz de 28 anos, bilionário e criador do Ethereum. Em 2014 ele escreveu o Whitepaper: A Next-Generation Smart Contract and Decentralized Application Platform. Neste paper foi proposta a criação de uma plataforma onde, por meio da tecnologia de “cadeia de blocos”, máquinas virtuais (Ethereum Vitual Machine – EVM) teriam a capacidade de executar instruções de mudança de estado e consolidação de dados na Blockchain, usando os mesmos processos de mineração utilizados até então pelo Bitcoin para validar transações. Com isso, o sonho de Satoshi Nakamoto (Criador do Bitcoin) de criar uma moeda descentralizada daria o próximo passo evolucionário, provendo, por meio de Smart Contracts, aplicações complexas automáticas, imutáveis e seguras.

O que o Ethereum pretende fornecer é uma Blockchain com uma linguagem de programação Turing-completo integrada que pode ser usada para criar “contratos” que podem ser usados ​​para codificar funções de transição de estado arbitrárias, permitindo que os usuários possam criar qualquer um dos sistemas descritos acima, assim como muitos outros que ainda não imaginamos, simplesmente escrevendo a lógica em algumas linhas de código.

Vitalik Buterin – 2014

Blockchain

O conceito base de uma Blockchain é fornecer uma estrutura de armazenamento de informações semelhante a um banco de dados, porém onde os dados armazenados são imutáveis. Mas então como os saldos das carteiras são atualizados? A maior parte das Blockchain armazena os registros transações em lotes e atualizam uma espécie de cache de estados. Quando se cria um Full Node do Ethereum, por exemplo, o sistema precisa realizar a leitura e sincronia de todos os dados de transações desde o primeiro bloco. Esse processo demora um bom tempo e, à medida que os blocos vão sendo gerados e alteram o estado da aplicação, esse “resumo” é atualizado. Quando realizamos consultas em uma Blockchain, na realidade estamos solicitando dados do estado consolidado. Seria impossível manter um sistema de consultas baseado na pesquisa de dados de transações passadas para recalcular em tempo real os saldos das carteiras. Mesmo que essas informações fossem persistentes em memória, em pouco tempo não existiria capacidade de armazenamento no mundo para manter um Full Node e o volume de consultas rapidamente criaria um colapso na aplicação.

Portanto os dados imutáveis de uma Blockchain são os registros de transações, o estado da aplicação sofre mutação o tempo todo. Sendo assim, é possível armazenar quaisquer tipos de dados em uma Blockchain, não apenas dados de transações.

Ethereum Virtual Machines (EVM)

No paper, Vitalik cita o termo “Turing-completo”, isso significa que a Blockchain do Ethereum tem a capacidade de ler instruções de bytes em sequência e executar cálculos e mudanças de estado bem limitadas, uma espécie de computador primitivo, restritos a pequenas operações. Na pratica, as EVM recebem instruções binárias para um contrato pré-inscrito em linguagem Solidity, executam essas funções internamente e devolvem dados que podem variar desde visualizações simples até alterações dos dados de estado do contrato. Portanto, todo Smart Contract possui um estado único e cada contrato possui sua própria “carteira”, que identifica e torna possível que este seja o “dono de ativos”. Existe uma regra de cobrança para consolidação dos dados, em que a carteira que envia a chamada de função do contrato que realiza operações de mudança de estado fica responsável por pagar os custos de mineração. Quando geramos um contrato de Token, por exemplo no padrão ERC-20, ao criar o contrato na rede é cobrado um valor para anexar o código binário à Blockchain, consolidar o estado e tudo mais e, para cada ação de transferência, criação de supply, queima de Tokens, etc., será cobrado um valor a ser pago aos mineradores que irão processar essa operação.

Honestamente, eu não me aprofundei tecnicamente em como essa operação ocorre mas, por dedução lógica, quem de fato processa essa EVM são os mineradores, já que rodar uma compilação, mesmo que simples, requer um processador ou GPU, já que todos os Smart Contracts são públicos e seus códigos estão disponíveis para qualquer minerador executar. O mais importante de se entender deste conceito é que os EVMs e Smart Contracts são passivos, algum software externo precisa provocá-los para que algo aconteça de fato, não existem rotinas automatizadas como jobs, schedules, services, etc. Em um Smart Contract a contabilização temporal, como informações de data e hora, utiliza como referência o último bloco minerado da Blockchain, então não possui uma precisão muito alta. O processamento não ocorre em realtime e o valor gasto no processamento é estimado, já que o custo varia por demanda da rede, tempo de processamento, bytes consolidados, entre outros fatores.

Por isso, a todos que pensam em criar sistemas baseados em Blockchain Ethereum, saibam que, quando mais complexos e quando mais dados armazenados, maior o custo em longo prazo. Por isso soluções de Layer 2, como a Sidechain BNB e a Polygon, surgiram para tentar baratear esse processo, usando a mesma tecnologia da Mainnet (Rede principal do Ethereum), e qualquer um pode criar sua própria rede mas, ao fazer isso, assumem-se os riscos de segurança e confiabilidade.

Ether

O Ether é a moeda da rede Ethereum, então, quando falamos que termos ETH na carteira, o que termos de fato são Ethers, tanto que é possível procurar no Google “Ether to BRL”.

Quando pagamos taxas de consolidação na rede, estamos pagando em Ether. A rede Ethereum utiliza uma moeda com 18 casas decimais, os fatoriais fracionários recebem o nome de GAS e sua menor unidade é o GWEI. Existem vários sites onde podemos ver o uso da rede, o preço médio do GAS e os maiores utilizadores da rede no momento, eu gosto bastante da Etherscan.

Solidity

Solidity é a linguagem desenvolvida pela equipe do Ethereum para a criação dos Smart Contracts: uma linguagem relativamente simples, um compilado composto basicamente por tipos primitivos e pequenas funções estruturadas em uma espécie simples de classes com recursos de herança e importação de dependências. Não existe uma forma simples de debugar, por hora a forma mais consistente é com a utilização de testes automatizados que irão criar e operar esses contratos, validar o retorno das operações e consolidar dados em uma Blockchain de teste, como Ganache.

Vou deixar um post que fiz sobre o uso na pratica de Solidity. Mesmo que não tenha entrado a fundo em questões técnicas, serve como um início para entender como funciona:

Pretendo, em breve, fazer mais conteúdo sobre Solidity e criação de outros tipos de Smart Contracts menos convencionais mas, por se tratar de um assunto bem complexo, provavelmente vou fazer em formato de vídeos complementares aos posts.