Se você é novo no desenvolvimento de blockchains, há muitos conceitos desconhecidos em torno dos nós e como eles desempenham um papel em sua pilha de blockchain. O que é um nó de blockchain? Por que administrar seu próprio nó da Ethereum é difícil? O que é um fornecedor de nós e por que preciso de um? Quais são as diferenças entre os provedores como Infura, Alchemy e Quicknode?
Acredite em mim, já passamos por isso. É super confuso. Aqui está um resumo rápido do que você precisa saber.
O que é um nó na blockchain?
Comecemos do básico! Um nó é essencialmente um programa executado em um único computador que permite a conexão com o resto da rede da blockchain. Ele se conecta com outros nós para enviar informações para frente e para trás, verifica se as transações enviadas entre pessoas são válidas e armazena informações importantes sobre o estado da blockchain.
Em particular, uma das peculiaridades de uma rede de blockchain é que a rede é composta essencialmente apenas de nós: ou seja, o hardware físico que executa uma blockchain como a Ethereum ou Bitcoin é apenas a coleção de todos os nós ao redor do mundo que estão sendo executados por pessoas individuais. Não há servidor mestre ou fonte única de verdade - é por isso que ele é descentralizado!
Finalmente, é importante observar que não há como acessar as informações em uma blockchain sem usar um nó. Não pode ser feito. Pense nisso como o navegador da blockchain.
Você interage com um nó enviando solicitações a ele e recebendo respostas dele através de uma API. Por exemplo, você pode enviar uma solicitação como a seguinte, assumindo que você esteja rodando um nó em seu computador na porta 8545:
A "blockchain" é apenas um conjunto de computadores (nós) geridos por indivíduos, que participam coletivamente da verificação do estado desta blockchain seguindo um certo conjunto de regras.
curl localhost:8545 \-X POST \-H "Content-Type: application/json"
-d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":0}'
Experimente isso online usando o Alchemy Composer. Esta solicitação pedirá a seu nó que retorne o último número do bloco, ou o Try it out online usando o Alchemy Composer! o bloco mais recentemente produzido na rede, chamando o método blockNumber. Aqui está um exemplo de resposta:
{ "jsonrpc": "2.0", "id": 0, "result": "0xa1c054"}
Como você pode ver, o bloco mais recente neste caso é 0xa1c054, que se traduz para o bloco 10600532 em forma decimal.
Por que executar um nó é difícil?
Há algumas coisas que tornam o desenvolvimento do seu próprio nó conectado à rede particularmente irritante. Vamos tratar de algumas razões:
Os nós levam muito tempo para serem instalados - até semanas!
A maldição de qualquer desenvolvedor é gastar muito tempo montando uma ferramenta que não contribui diretamente para o que ele está tentando construir, e os nós estão entre os piores infratores.
Há normalmente duas categorias principais de nós - nós leves e nós completos. Os nós leves sincronizam apenas os cabeçalhos do bloco e solicitam dos nós completos muitas consultas, enquanto os nós completos mantêm todo o estado de uma blockchain - cada transação que já foi criada. A maioria das consultas funciona com nós leves, mas os nós completos são a espinha dorsal da blockchain - eles são necessários para fornecer a maioria das informações.
Os nós leves tornaram- se relativamente mais simples no passado, mas ainda requerem a instalação do programa de nós, o ajuste de variáveis de configuração, o download de cabeçalhos de bloco e a verificação das portas e da integridade para garantir que estejam funcionando corretamente. Se você conseguir colocar seu primeiro nó leve em funcionamento em menos de 30 minutos, nos avise no Discord e nós lhe daremos uma medalha personalizada por seus esforços 👏👏.
Nós completos são ainda piores: o maior problema é que os nós completos precisam baixar cada bloco do 0 ao último começando do início e reproduzir manualmente cada bloco e transação já submetida por qualquer pessoa. Para a mainnet (rede principal) da Ethereum, isso é mais de 10 milhões de blocos e na ordem de bilhões de transações. Isso pode levar literalmente semanas de sincronização.
Nota: Na Ethereum, há mais um tipo de nó chamado nós de arquivo que são úteis para pesquisas históricas. Não vamos abordá-los em profundidade aqui.
Os nós têm que ser gerenciados - por você!
Prepare-se para o projeto dev-ops do inferno. Apenas uma rápida visão geral:
- Os nós precisam ser atualizados regularmente a cada poucas semanas e, ocasionalmente, reconstruídos do zero no caso de hard forks (n.t.: quando tudo deve ser atualizado, já que a nova versão não será compatível com as versões anteriores) e de nós de atualização de clientes.
- Como a maioria dos nós não foi projetada com a confiabilidade em mente, certas consultas (tais como eth_getLogs) podem envolver correr por milhões de blocos e transações e, muitas vezes, ficar sem tempo ou quebrar um nó - chamamos de "consultas de morte". Portanto, você terá que ficar de olho na integridade de seu nó e acordar para depurá-lo com bastante frequência às 3 da manhã.
- Os nós individuais podem ficar atrás da rede por vários motivos - problemas de peering e conexão, ficar encalhados em ramos desatualizados, problemas com o estado interno. Se eles estiverem atrás, seus usuários receberão dados desatualizados, mas não perceberão - o que pode ser uma experiência perigosamente ruim.
Escalar além de um único nó é complicado!
Um único nó é bom e elegante quando você está construindo um projeto pessoal (mesmo que ele continue a colidir com você de forma intermitente). Mas o que acontece quando você não consegue tornar seu servidor de nó suficientemente grande para acompanhar as solicitações que você está enviando?
"Eu vou apenas rodar dois nós - e montar um balanceador de carga entre eles", você pode sugerir. Foi o que pensamos também! Infelizmente, esta configuração é na verdade super difícil de manter a consistência, porque os nós diferentes "vêem" o estado mais recente da blockchain de maneiras ligeiramente diferentes, levando a dados inconsistentes e a outros problemas enfrentados pelo usuário.
Imagine isto: temos dois nós sincronizados separadamente atrás de um balanceador de carga. O nó A pensa que o último bloco é o bloco 5, e o nó B pensa que é o bloco 4. Esta é uma situação totalmente normal - porque as informações mais recentes se propagam lentamente através da rede, alguns nós estarão sempre à frente de outros.
Você: Ei Sr. Balanceador de Carga, qual é o último bloco que você vê?
Sr. BC: (Envia o pedido ao Nó A e retorna a resposta): O último bloco da rede é o bloco 5.
Você: Obrigado! Você pode compartilhar comigo as informações do bloco 5?
Sr. BC: (Envia pedido ao Nó B desta vez): Desculpe, eu não sei sobre o bloco 5. Por favor, tente novamente.
Em uma situação real, imagine um usuário comprando um NFT em seu aplicativo. Eles podem comprar um NFT enquanto enviam pedidos ao Nó A - mas quando suas consultas começam a ir para o Nó B, pode parecer que suas transações nunca aconteceram! Questões de consistência como esta são generalizadas e muito complicadas de resolver - especialmente quando você dimensiona para dezenas de nós.
O que é um provedor de nó?
Os provedores de nós são essencialmente times (como nós!) que oferecem uma maneira de acessar as informações em uma blockchain sem ter que rodar seu próprio nó! Em essência, em vez de enviar suas solicitações a um nó local, você pode enviá-las pela Internet a um provedor que oferece uma API idêntica, que está rodando nós totalmente sincronizados e atualizados, disponíveis 24 horas por dia, 7 dias por semana.
Se você se lembrar do blockNumber do bloco acima, isto é o que parece um pedido de nó quando enviado a um provedor:
curl https://eth-mainnet.alchemyapi.io/v2/your-api-key \ -X POST \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"eth_blockNumber","params":[],"id":0}'
Acabamos de trocar o endpoint! Nenhuma outra mudança é necessária.
Um fornecedor de nó estável oferecerá, no mínimo:
- Acesso a nós leves e completos, com nós e alertas atualizados regularmente, para que você não tenha que se preocupar com forks ou mudanças na rede.
- Acesso aos nós de arquivo para dados históricos de transações (somente o Alchemy faz isso de graça!)
- Escalabilidade e confiabilidade: os nós devem estar disponíveis sempre que você quiser, tanto quanto você os queira.
- Consistência: os fornecedores devem lidar com casos extremos complicados, semelhantes ao problema do último bloco acima. Isto é muitas vezes um problema quando se usa Infura ou outros provedores.
Estou executando meu dApp localmente e ele funciona muito bem! Por que eu preciso de um provedor de nós?
Até que você esteja pronto para enviar tráfego para uma testnet (rede de teste) pública ou mainnet (rede principal), você não precisa de um provedor de nós! Uma versão local da blockchain para testes (como fornecida pelo Hardhat ou Truffle / Ganache) é tudo o que você precisa para construir e testar seu projeto.
Uma vez que você queira implantar seu aplicativo em uma cadeia real, os provedores de nós se tornam uma peça crítica de seu fluxo de trabalho de desenvolvimento.
Primeiro, você precisará de uma maneira de implantar seu contrato inteligente através de uma transação para a blockchain - você só pode fazer isso através de um nó na blockchain. Isso significa executar seu próprio nó, ou enviar sua transação a um provedor.
Em segundo lugar, seu aplicativo provavelmente precisará continuar puxando informações sobre a blockchain para atualizar seu estado interno. Essas informações também passam por um nó ou um provedor de nó - e você vai querer que esse canal seja confiável e sincronizado adequadamente para que você não esteja fornecendo dados desatualizados ou quebrados aos usuários.
O que é o Alchemy e como ele se diferencia de outros provedores de nós?
Se você chegou a este ponto, você pegou a essência do porquê de existirmos! Somos essencialmente um fornecedor de nós de blockchain com altíssima confiabilidade, fantástico suporte ao cliente e muitas ferramentas de desenvolvimento, três características que são críticas para nossos clientes empresariais e a razão pela qual temos 70% dos principais aplicativos em blockchain enviando seu tráfego através de nós.
Se você estiver interessado em saber como a infra-estrutura do Supernó do Alchemy resolve questões de consistência como as descritas acima, você pode aprender mais aqui.
Há várias coisas adicionais que nos diferenciam de outros fornecedores de nós no espaço:
- Ferramentas para Desenvolvedores: Como você sabe quais solicitações seus usuários estão enviando? Se seus pedidos falharem, como você pode visualizá-los / depurá-los? O que está acontecendo com as transações que você enviou que estão esperando para serem mineradas? Fornecemos uma série de ferramentas em nosso Alchemy Dashboard que lhe permitem analisar o tráfego em seu dApp que, de outra forma, envolveria páginas de arrasto de registros.
- Push Notifications: O que fazer se você quiser ser alertado sempre que um usuário da Ethereum que você estiver seguindo (por exemplo, Vitalik Buterin) executar uma transação? Você poderia escrever um script para ler cada bloco e procurar por um endereço específico e executá-lo 24 horas por dia, 7 dias por semana - ou poderia usar uma ferramenta como o Alchemy Notify, uma ferramenta exclusiva que envia notificações push (webhooks) para eventos na blockchain.
- APIs Avançadas: E se você quiser procurar todas as transações feitas por um único usuário ETH? Embora isto possa ser simples em um banco de dados SQL, é proibitivamente difícil em uma blockchain - você basicamente precisa escanear cada transação na blockchain (novamente, nos bilhões na rede principal ETH!) para ver se ela inclui um endereço. Construímos várias APIs avançadas que permitem que você faça esta consulta e outras consultas similares instantaneamente.
Como posso começar?
Usar o Alchemy como um provedor de nós é insanamente simples - na verdade, deveria ser apenas uma única linha de código para começar! Se você tem usado web3.js ou ethers.js, é tão simples quanto criar uma conta Alchemy gratuita, gerando uma chave API e substituindo a instanciação por algo assim:
const web3 = createAlchemyWeb3("https://eth-mainnet.alchemyapi.io/");
Se você quiser um tutorial completo, confira nosso Getting Started With Alchemy documentation here!
E finalmente, estamos sempre disponíveis para ajudar 24 horas por dia, 7 dias por semana, em nosso Alchemy Discord. Passe por aqui e diga olá - adoraríamos ajudá-lo em sua jornada para se tornar um verdadeiro desenvolvedor de blockchain!
12 de outubro, 2021
Este artigo foi escrito por Deric Cheng e traduzido por Fátima Lima. O original pode ser lido aqui.
Latest comments (0)