Blockchain Ethereum Fundamentos de arquitetura, desenvolvimento de contratos e aplicações
João KuntzSobre o livro
Para quem é este livro
Este livro foi planejado com vistas a suprir uma lacuna existente na literatura técnica, em português, sobre a tecnologia blockchain, especificamente sobre o Ethereum – uma blockchain pública, capaz de hospedar e executar trechos de código, sendo, portanto, classificada como uma blockchain de uso geral.
Nossa preocupação aqui foi a de apresentar os fundamentos do funcionamento desta tecnologia, o que veio como uma resposta ao desafio de manter um livro técnico atualizado, considerando a velocidade com que vemos atualizações de produtos e componentes.
Se, por um lado, a tecnologia como um todo evolui rapidamente, os fundamentos são mantidos ao longo dos anos – sendo seu conhecimento necessário e pertinente para profissionais de diferentes níveis de senioridade, em diferentes momentos, o que justifica nossa opção.
Nosso público-alvo abrange uma grande gama de pessoas interessadas no assunto. Justamente por não ser um livro baseado inteiramente em um framework muito específico de trabalho, ele pode ser aproveitado com a mesma intensidade por pessoas leigas, interessadas em descobrir como uma blockchain funciona pelo simples fato de este ser um assunto bastante comentado ultimamente, como por analistas de negócio e profissionais em posição estratégica, que queiram entender como ela pode trazer ganhos de competitividade às suas organizações, e, da mesma maneira, por desenvolvedores e pessoal estritamente técnico, que queiram descobrir como é possível escrever aplicações que se baseiem em uma blockchain para funcionar, aumentando seu portfólio de tecnologias de trabalho.
Conhecimentos necessários
Por ser um livro de fundamentos, não existem pré-requisitos sobre o assunto para sua leitura. Iniciamos nossa jornada explicando cada conceito necessário a partir do zero, de forma que todos poderão aproveitar as informações da mesma maneira.
Por outro lado, como tratamos aqui de sistemas computacionais, esperamos que você tenha um mínimo de um conhecimento sobre informática, e tenha algumas noções sobre lógica de programação. Por exemplo, em algum momento citamos a existência de compiladores, mas não explicamos o que são e para que servem – o que é um conhecimento que esperamos que o leitor ou leitora tenha, ou seja capaz de buscar por meios próprios.
Mais para o final do livro temos alguns capítulos dedicados à codificação de smart contracts; neles, montamos nosso ambiente utilizando o Node.js, com fins meramente ilustrativos.
Apesar de não ser necessário o conhecimento sobre este runtime, já que cada passo terá sido detalhado – podendo ser simulado mesmo por pessoas que não o conheçam – não entramos em detalhes específicos sobre ele ou seu funcionamento, por exemplo, quando citamos o uso de comandos do Node Package Manager (NPM) sem dar detalhes sobre sua execução ou sobre a estrutura de seus pacotes. Apesar de não impedir o entendimento do assunto, caso você tenha dificuldades em momentos como estes, sugerimos a busca por informações complementares antes de prosseguir para os próximos capítulos.
O que esperar deste livro
Um dos maiores desafios que encontramos quando nos propomos a escrever um livro técnico, especialmente na área da informática, é o de que a informação contida nele vira obsoleta rapidamente.
Tendo isso em mente e, indo de acordo com os grandes autores da Ciência da Computação, aqui teremos como foco os fundamentos da blockchain e sua programação, usando como ferramentas as principais tecnologias aplicadas, sem dar ênfase aos projetos paralelos nem frameworks e aplicações muito específicos. Como os fundamentos não se alteram ao longo do tempo (pelo menos não com a mesma velocidade que a tecnologia), mantemos, assim, uma obra atual e interessante para o público ao longo dos anos.
A documentação oficial do projeto seguramente dará à leitora e ao leitor todas as respostas sobre novidades e procedimentos, e consultando-a, temos a certeza de estarmos sempre com a informação mais atualizada sobre a versão de trabalho. O link para o projeto Ethereum é o https://ethereum.org/, e também segue citado na bibliografia.
Esta não é, de forma alguma, uma publicação sobre criptomoedas (ainda que elas sejam mencionadas eventualmente). Não serão dados aqui conselhos sobre investimentos, tampouco opiniões sobre valor de carteiras, transações, nem mesmo sobre plataformas de ativos digitais. Existem diversos canais na Internet nos quais o leitor pode se informar, se este for o interesse.
Este também não é um livro com foco no ensino de programação. Introduziremos aqui uma linguagem de programação de alto nível — o Solidity — e demonstraremos como ela pode ser aplicada na criação de Smart Contracts — trechos de código executados na blockchain. Assume-se que a leitora ou o leitor já possua certa familiarização com algoritmos, lógica de programação e que conheça conceitos básicos de programação orientada a objetos. Assim, deixaremos de abordar temas básicos, como o funcionamento da avaliação de condicionais com if/else, por exemplo, por entendermos ser este um assunto de conhecimento geral.
No capítulo 1 introduziremos os conceitos gerais sobre a tecnologia por trás da cadeia de blocos e o que ela se propõe a resolver. Falaremos sobre a Web 3.0, a evolução da blockchain ao longo da história e sua adoção, citaremos alguns serviços de plataformas com soluções para diferentes blockchains, até chegarmos no Ethereum.
A partir do capítulo 2 veremos como é o funcionamento da blockchain a partir de um ponto de vista técnico. Serão elucidados temas como criptografia, algoritmos de consenso, mineração, a importância do controle do tempo no processo de mineração, entenderemos qual a finalidade dos quebra-cabeças lógicos, veremos o que são transações e, ainda, entenderemos termos como Proof-of-Work (PoW), Proof-of-Stake (PoS), Proof-of Authority (PoA), Mempool, Nonce, blocos órfãos, entre outros. Isso nos permitirá entender como a blockchain é uma tecnologia tão segura, como é garantida a imutabilidade das transações e ainda, como se garante a ininterrupção dos seus serviços.
Em seguida, no capítulo 3, nossa atenção se virará totalmente para a Rede Ethereum. Serão apresentados seus principais conceitos e filosofias, entenderemos como são processadas as transações dentro dela, discutiremos máquinas de estado, blocos do Ethereum, falaremos sobre os forks do projeto — que modificaram a cadeia original —, trataremos de temas como contas e carteiras, falaremos sobre o Ethereum Gas, definiremos mensagens, comprovantes de transação, dificuldade dos blocos, contratos e apresentaremos, com detalhes, a EVM. Terminaremos o capítulo falando do Ethereum 2.0, uma atualização da rede que trará vantagens competitivas extremamente importantes, e repassaremos sua história.
A partir do capítulo 4 abandonamos os conceitos estritamente teóricos passamos a discutir os principais tipos de aplicações e tecnologias com as quais trabalharemos ao implementarmos nossas soluções no Ethereum. Falaremos sobre os contratos inteligentes, criação de aplicações descentralizadas, utilização de mecanismos de DeFi e NFTs e apresentaremos um desafio importante para o Ethereum: sua capacidade de escalabilidade. Veremos como esse tema vem sendo tratado, e as alternativas disponíveis.
No capítulo 5 começaremos a preparar nosso ambiente para o desenvolvimento de smart contracts. Conheceremos alguns componentes que serão utilizados e faremos suas instalações, passo a passo, de forma que todos estejamos com um ambiente pronto para o uso nos capítulos posteriores.
No capítulo 6, finalmente, estudaremos o Solidity, a principal linguagem de programação utilizada para o desenvolvimento de contratos publicados no Ethereum. Ao final, além da sintaxe de uma nova linguagem de programação, você conhecerá detalhes de sua arquitetura como tipos de dados, declarações de armazenamento de variáveis, funções globais, geração de eventos, criação de funções, entre outros.
Todo o conhecimento adquirido será colocado em prática no capítulo 7. Aqui, desenvolveremos dois smart contracts diferentes, e trabalharemos com a "tokenização", isto é, a criação de tokens fungíveis e não fungíveis (NFTs) para o Ethereum. Veremos passo a passo como as ferramentas disponibilizadas pelo Solidity podem ser utilizadas e organizadas, de forma a garantir a execução de trechos de código de forma eficiente, com menores custos de transação. Também testaremos a eficácia de nosso código a partir da escrita de testes unitários, em que veremos o resultado de nossas execuções, em tempo real.
No capítulo 8 discutiremos aspectos de segurança da Rede Ethereum. Veremos os principais tipos de ataque para os quais uma rede blockchain é vulnerável e também listaremos algumas das principais vulnerabilidades que devem ser tratadas no desenvolvimento de nossos códigos, durante a criação dos nossos smart contracts.
Finalmente, no capítulo 9, falaremos sobre o armazenamento de arquivos em uma blockchain e finalizaremos tratando sobre um assunto extremamente atual: a consulta e o consumo de dados de uma blockchain com vistas à geração de insights, utilizados por cientistas de dados e consumidos por aplicações de inteligência de mercado. Finalizaremos apresentando o projeto The Graph ("O Grafo") que, através de um protocolo de indexação próprio, permite a realização de consultas do tipo GraphQL no Ethereum, servindo como uma importante ferramenta para o profissional que queira trabalhar com analytics no contexto da blockchain.
Sobre o autor
João Kuntz
Tecnólogo em análise e desenvolvimento de sistemas pela Faculdade de Tecnologia da Baixada Santista Rubens Lara (FATEC-RL), especialista em Engenharia da Qualidade de Software pelo Centro Universitário Senac, possui MBA em Arquitetura de Software pelo Instituto de Gestão e Tecnologia (IGTI) e é Mestre em Engenharia Mecânica (controle e automação mecânica), com pesquisas na aplicação de Redes Neurais Artificiais Paraconsistentes, pela Universidade Santa Cecília.
Foi palestrante na TDC Future 2021 na trilha de blockchain, falando sobre a criação de smart contracts em projetos DeFi, e também é professor no MBA de Desenvolvimento Descentralizado e Distribuído da FIAP nas disciplinas de Arquitetura de Blockchain de Rede Pública e de Desenvolvimento de Smart Contracts & Tokenização.
Antes disto, formou-se bacharel em química e trabalhou por alguns anos com análises espectroscópicas até descobrir e se encantar pela informática.
Atua como Arquiteto de Software em projetos internacionais, com uma marcante passagem profissional pelo México, tendo liderado implementações simultâneas na Guatemala, El Salvador, Honduras e Colômbia, com ênfase na arquitetura de integrações com sistemas SAP e SalesForce e no desenho técnico de sistemas com arquitetura de microsserviços, além de ter sido responsável pela criação de estratégias de CI/CD e implementação de práticas DevOps e SRE com os times.
Apaixonado pela cultura data-driven, pela arquitetura de dados e a computação em nuvem, possui certificações Microsoft e AWS.
Grande entusiasta da tecnologia de blockchain, acredita que as empresas que queiram garantir suas vantagens competitivas frente a Web 3.0 devem começar a pensar desde já em suas estratégias em aplicações descentralizadas.
Sumário
- Parte 1 - BLOCKCHAIN COMO TECNOLOGIA
- 1 Introdução
- 1.1 Web 3.0 e a descentralização
- 1.2 Evolução da tecnologia blockchain
- 1.3 Blockchain: percepção e adoção
- 1.4 Blockchain-as-a-service (BaaS)
- 1.5 Afinal, o que é a Rede Ethereum?
- 2 Blockchain para principiantes
- 2.1 Introdução
- 2.2 Bloco de transação e a Árvore Merkle
- 2.3 Criptografia e validação
- 2.4 Protocolos de consenso
- 2.5 Contas, assinaturas e endereços
- 2.6 Transações
- 2.7 Forking em projetos blockchain
- 2.8 Decisões arquiteturais sobre o uso da blockchain
- 3 A Blockchain Ethereum
- 3.1 Introdução
- 3.2 Blocos no Ethereum
- 3.3 Ether
- 3.4 Gas
- 3.5 Transações no Ethereum
- 3.6 Criptografia no Ethereum
- 3.7 Ethash e Casper
- 3.8 Tokens e oracles
- 3.9 A Ethereum Virtual Machine
- 3.10 Ethereum 2.0
- 3.11 O caminho até o Ethereum 2.0
- 4 Anatomia das aplicações Ethereum
- 4.1 Introdução
- 4.2 Smart Contracts
- 4.3 Aplicações descentralizadas (dApps)
- 4.4 Finanças descentralizadas (DeFi)
- 4.5 Tokens Não Fungíveis (NFTs)
- 4.6 Escalabilidade no Ethereum
- Parte 2 - DESENVOLVENDO PARA A BLOCKCHAIN ETHEREUM
- 5 Preparando o ambiente de desenvolvimento
- 5.1 Introdução
- 5.2 Node.js
- 5.3 Compilador de pacotes C/C++
- 5.4 Inicializando o projeto via NPM
- 5.5 Chalk
- 5.6 Mocha
- 5.7 Compilador Solidity
- 5.8 Editor de código e plugin Solidity
- 5.9 Web3.js
- 5.10 Ganache
- 5.11 Setup inicial do projeto
- 5.12 Uma alternativa rápida: Remix
- 6 Linguagem de programação Solidity
- 6.1 Introdução
- 6.2 Características do Solidity
- 6.3 Tipos
- 6.4 Variáveis
- 6.5 Tratamento de erros e exceções
- 6.6 Eventos
- 6.7 Funções
- 6.8 Building blocks do Solidity
- 6.9 Documentação do código
- 7 Implementando Smart Contracts e Tokens
- 7.1 Introdução
- 7.2 Guia de estilo e organização do código
- 7.3 Smart Contract - Cadastro de alunos
- 7.4 Testando nosso Smart Contract
- 7.5 Smart Contract - Telefonia celular
- 7.6 Criação de um Token ERC-20
- 7.7 Criação de um Token ERC-721 (NFT)
- 7.8 Otimizando os custos de transação
- Parte 3 - SEGURANÇA E ARMAZENAMENTO NA BLOCKCHAIN ETHEREUM
- 8 Segurança na Rede Ethereum
- 8.1 Introdução
- 8.2 Redes de tolerância a Falha Bizantinas
- 8.3 Ataques de 34% e 51%
- 8.4 Ataques de corrida e de Finney
- 8.5 Ataques Eclipse e Sybil
- 8.6 Vulnerabilidades em Smart Contracts
- 8.7 Ataques de reentrância
- 9 Armazenamento e analytics na Rede Ethereum
- 9.1 Introdução
- 9.2 Armazenamento descentralizado
- 9.3 Insights via exploradores de blocos
- 9.4 Consultas GraphQL na blockchain
- 9.5 Conclusão
- 10 Referências
Dados do produto
- Número de páginas:
- 288
- ISBN:
- 978-85-5519-294-4
- Data publicação:
- 03/2022