Então você é um dev web tradicional. Você sabe programar para o backend, para o frontend ou possivelmente para ambos (fullstack). Possivelmente conhece HTML, CSS, JS, alguma tecnologia de back, alguma lib ou framework de front (geralmente SPA)…e agora ouviu falar de uma tal de web3 e talvez esteja se perguntando: o quê muda? No que isso impacta tecnicamente os meus projetos? Neste artigo eu quero trazer uma visão prática e técnica justamente sobre essas diferenças, visando te dar um overview e uma introdução ao assunto.
Vamos lá!
Web 1.0 x Web 2.0 x Web3
Falo sobre este assunto no vídeo abaixo, caso prefira assistir ao invés de ler.
Nos anos 90 nós tivemos a criação da web, onde usávamos HTML para escrever a estrutura de nossas páginas, CSS para estilizá-las e no máximo um JS em máscaras de campos, validações e mais. Tudo muito simples e estático e pouco tempo depois com o dinamismo proporcionado por tecnologias de backend e banco de dados. Essa era a web 1.0, onde os usuários apenas consumiam os sites, sem produzir conteúdo.
Nos anos 2000 nós tivemos a evolução dessa web original com a adição de tecnologias mais poderosas de frontend como o Ajax, que permitia requisições JS assíncronas e a evolução drástica da virtualização que permitiu o surgimento da computação em nuvem. Com mais capacidade de processamento e armazenamento, aliado a experiências de frontend mais leves e dinâmicas, a Web 2.0 permitiu que os usuários passassem a se tornar os produtores de conteúdo através de redes sociais, plataformas de streaming e mais. No entanto, a dependência dos grandes players de nuvem e plataformas de serviços como Google, Microsoft, Amazon, etc (as Big Techs), tornou a web algo mais centralizado, deixando de ser um movimento orgânico dos usuários para os usuários e perdemos completamente o controle sobre nossos dados, privacidade, etc.
Novas propostas para uma terceira geração da web começaram a surgir e com a popularização da blockchain na segunda década deste milênio, foi natural unirem a descentralização, segurança e outras características inerentes a essa rede com a retomada do ownership sobre a web pelos usuários e para os usuários novamente. Assim, a Web3 nada mais é do que uma web que roda sobre os nós das blockchains públicas, sem centralização nas big techs, utilizando as criptomoedas como economia, as carteiras cripto como identidade e mais.
E atenção: eu não estou falando de teorias, diferente de outras propostas de web 3.0. A Web3 já está acontecendo, já tem milhões de usuários ao redor do mundo e milhares de aplicações rodando na blockchain. Por isso, se você é dev web 2.0 e ainda não sabe nada sobre Web3, esse artigo vai te ajudar a se situar e se preparar.
Arquitetura Centralizada x Descentralizada
O primeiro passo é entender a diferença arquitetural entre os modelos da web 2.0 e Web3.
Na Web 2.0 nós temos um servidor central, onde hospedamos nossa aplicação de backend, que pode ou não gerar a aplicação de frontend também (SSR ou Server Side Rendering), que será entregue no browser para o usuário utilizar. Nosso banco de dados também pode ficar neste mesmo servidor ou outro próximo, para que tenha boa performance e segurança. Esse servidor tem tradicionalmente um endereço IP, ao qual associamos nomes de domínio para facilitar o seu acesso. Existe a possibilidade de replicar o server, trabalhar com clusters, espelhar bancos de dados e mais, mas tudo isso é muito caro e tem de valer a pena financeiramente, geralmente ficando restrito a grandes projetos de grandes empresas com capital e equipes para isso. Logo, via de regra, nossas aplicações web possuem arquiteturas centralizadas.
Na Web3 nós não temos um servidor central. Nossa aplicação é escrita em smart contracts: arquivos de código que atendem a comandos dos usuários e que são hospedados em TODOS os nós de uma rede blockchain. Basta fazer deploy pra um nó e ele se encarregará de distribuir para os demais, sendo que em todos eles o seu contrato terá o mesmo endereço. Assim, absolutamente qualquer nó online pode atender às requisições de um usuário. Como a blockchain também funciona como banco de dados, nossos dados também estarão armazenados de maneira descentralizada e replicados globalmente, tudo isso sem qualquer configuração ou custo adicional, ou seja, via de regra uma aplicação web3 é descentralizada. O frontend pode ser estático ou dinâmico, utilizando tecnologias web tradicionais ou até mesmo ser hospedado de maneira descentralizada se for estático (HTML+CSS+JS client-side), utilizando redes de armazenamento como IPFS ou CDNs. A única adição ao frot é a necessidade de uma carteira cripto instalada no browser, algo que já está vindo nativamente em browsers mais modernos como Brave.
Claro, assim como no caso de aplicações web2, as aplicações web3 podem ser mais ou menos descentralizadas à medida que a rede onde ela esteja provisionada o seja também. Diferentes tipos de blockchains possuem características diferentes para performance, segurança e descentralização, o que impacta diretamente nas aplicações que rodam sobre elas. No tocante a performance, por exemplo, quanto mais descentralizada uma blockchain for, mais ela tende a ser “lenta”, como no caso das redes públicas do Bitcoin e Ethereum (descentralizadas e lentas) ou, do outro lado, Solana (centralizada e rápida). Essa inversão proporcional é o que Satoshi Nakamoto chamou de Trilema da Blockchain em seu famoso paper de 2009.
Stack Sugerida
Com esses novos elementos em mente, um dev web2 fullstack que deseja trabalhar com aplicações web3 deve:
- aprender a programar smart contracts;
- aprender a interagir com a blockchain (consultas, deploy, etc);
- aprender a interagir com smart contracts existentes;
- aprender a interagir com carteira cripto (browser);
Claro que nem todo dev web3 será full stack, mas os elementos acima dão um bom norte do que é novidade na Web3, sendo que todo o restante permanece sendo a mesma coisa, como o frontend web por exemplo ou até mesmo o backend, caso seja necessário algum processamento adicional ao smart contract (arquitetura híbrida web2 + web3).
Para cada um desses elementos existem várias tecnologias possíveis de serem estudadas e utilizadas em projetos, então a seguir vou listar as principais delas. Use o vídeo caso prefira assistir ao invés de ler.
Ethereum Virtual Machine (EVM)
Mais de 80% do mercado de blockchains usa o padrão EVM ou Ethereum Virtual Machine. Este padrão é definido pela Ethereum Foundation e é usado por redes como Ethereum Mainnet, BNB Smart Chain (blockchain da Binance), Avalanche, Optimism, Arbitrum, Polygon e outras. Sendo assim e pensando no Princípio de Pareto, é o primeiro e principal padrão que você deve estudar para se familiarizar com web3. Isso inclui:
- saber fazer transações em redes EVM com carteira cripto (recomendo MetaMask);
- saber usar explorador de blocos;
- escrever smart contracts na linguagem Solidity;
- deploy e verificação de smart contract;
Sabendo programar em Solidity e fazer as tarefas acima em redes EVM-compatible te garantirá acesso a imensa maioria das vagas e projetos desse mercado. Depois dela, pode adicionar redes não compátiveis, como Solana, ao portfólio e principalmente: aprenda os principais padrão ERC para criação de contratos populares como moedas (tokens) e NFTs.
Libs de Web3
Para a parte de interação de frontend ou backend com carteira cripto, blockchain e smart contracts você precisará aprender a usar ao menos uma lib de web3. Essas bibliotecas encapsulam e abstraem as chamadas JSON RPC que a blockchain realiza, facilitando bastante nosso desenvolvimento. Existem hoje duas bibliotecas fortes no mercado, nesta ordem de importância: Ethers JS e Web3.js. Qualquer uma das duas que você escolher irá lhe servir bem, mas a primeira é mais popular. Aprenda a:
- conectar o front a uma carteira de browser para calls e transactions;
- carregar e usar carteira via backend (calls e transactions);
- interagir com um smart contract (front e back);
Existem algumas diferenças entre usar uma lib web3 no front e no back, logo é interessante aprender ambos. A principal diferença é que no frontend requer a integração com uma carteira de browser (como a MetaMask), enquanto que no backend requer o uso de um nó de blockchain em nuvem, utilizando provedores como Infura e Quicknode.
Toolkit para Smart Contract
Para o desenvolvimento do smart contracts também é comum a utilização de algum toolkit de mercado, sendo os principais o HardHat e o Foundry. Esses toolkits são instalados no seu projeto e permitem a escrita de testes unitários automatizados, scripts de deploy, fornecem métricas, otimizações e muito mais. Aprenda a:
- escrever unit tests;
- gerar métricas;
- scripts de deploy e verificação;
- subir blockchain local;
Como o HardHat é levemente mais popular que o Foundry mas usa JS/TS para acessar seus recursos, portanto é a minha recomendação padrão. Isso porque você já vai ter de usar JS/TS no frontend, logo é natural usar também no toolkit.
Existem inúmeras outras coisas que podem ser necessárias que você aprenda para construir aplicações web3 profissionais, mas os pontos citados acima são as principais diferenças de arquitetura e as principais tecnologias para compor sua stack. Tendo isso em mente você já pode começar a organizar seus estudos e iniciar nesse mundo novo e incrível que é a web3.
Até a próxima!
Olá, tudo bem?
O que você achou deste conteúdo? Conte nos comentários.