< Todos os Posts

Desenvolvimento em Blockchain da Ethereum com Web3.js

Blockchain é uma tecnologia brilhante que ganhou a atenção de corporações, líderes de tecnologia e desenvolvedores em todo o mundo. O universo de criptomoedas emergiu de uma nova esperança para pagamentos digitais e digitalização de ativos sem a necessidade de intermediários.

Neste tutorial, mostraremos como interagir com a rede Blockchain da Ethereum utilizando web3.js. Também, revisaremos os fundamentos do Ethereum e do Blockchain em geral e apresentaremos os principais conceitos para ajudá-lo a começar sua jornada de aprendizagem no mundo Blockchain.

Ah… você também vai encontrar excelentes materiais sobre Ethereum e Dapps aqui no nosso Blog!

O que vamos aprender:

  • O que é Blockchain?
  • Blockchain descentralizado vs. rede cliente / servidor
  • O que é Ethereum?
  • O que é Web3.js?
  • Acessando a rede Ethereum usando Infura
  • Instalando e executando Web3.js
  • O que é Etherscan?
  • Acessando informações da conta do Blockchain
  • Conectando-se a uma rede local Ethereum
  • Acessando tokens usando Web3.js
  • Trabalhando com contratos em Web3.js

O que é Blockchain?

Vamos tentar entender o Blockchain, nos termos mais simples possíveis! Caso você queira saber mais sobre o que é Blockchain, temos um blog específico sobre isso clique aqui para ler mais tarde.

Blockchain é um tipo de banco de dados que armazena informações em blocos e, em seguida, conecta esses blocos como uma corrente.

Você pode pensar nisso como uma lista de links em que blocos consecutivos são conectados através de seus hashes exclusivos. E seu banco de dados é distribuído pela rede sendo salvo pelos nós da rede.

Todas as transações são imutáveis, o que significa que não podem ser alteradas depois de registradas. Aprenderemos sobre transações, contratos inteligentes, moedas, tokens e muito mais neste artigo.

Blockchain vs. Rede Cliente / Servidor

O Blockchain é uma rede ponto a ponto onde todos os pontos estão conectados uns aos outros. As transações são gravadas em blocos, após o bloco ser lançado na rede é praticamente impossível que seu conteúdo seja alterado, ou excluído da rede.

Por outro lado, a configuração da rede cliente-servidor requer handshaking. Os dados estão sob a autoridade de um servidor ou grupo de servidores. Como seu conteúdo fica salvo em apenas um local é mais fácil alguma autoridade ou governo ou até mesmo um hacker derrubar o servidor ou alterar os dados já registrados nessa rede, uma vez que essa possui somente um ponto central.

Como a Blockchain é imutável, ela é ótima para manter os dados protegidos contra alterações. Ela pode ser usada para contratos, livros, diplomas, licenças e até mesmo votação em eleições. Lembre-se, no entanto, de que os dados são públicos e qualquer pessoa pode acessá-los, por isso, você não deve carregar dados confidenciais em redes públicas. A tecnologia Blockchain é a mais adequada para informações que devem ser abertas e transparentes.

A Blockchain é descentralizada e é bastante segura em comparação com servidores centralizados. Primeiro, tudo é altamente criptografado com o algoritmo SHA. Em segundo lugar, os dados são imutáveis e salvos nos blocos. Se houver uma tentativa de alterar os dados, a transação do bloco será interrompida e toda a transação será anulada.

Por exemplo, se alguém mau intecionado alterar algum dado do bloco , isso fará também uma mudança na Previus hash do bloco, já que todos os blocos se conectam a hash do bloco anterior e isso fará com que ocorra um erro e o bloco se anule automaticamente.

web3

Em outras palavras, alterar um único dado em qualquer bloco requer que todos os blocos sejam alterados ao mesmo tempo. Se um hacker incrivelmente persistente conseguisse fazer isso de alguma forma, mesmo assim, ele precisaria hackear milhares de nós e alterar os dados em todos os lugares ao mesmo tempo. O que é quase impossível e inviável, já que para hackear a rede é necessário um poder computacional muito grande.

O que é Ethereum?

Ethereum é um protocolo descentralizado que utiliza a Blockchain como plataforma onde é possível criar contratos inteligentes. Contratos inteligentes são os códigos de byte escritos na linguagem Solidity e compilados em (EVM) Ethereum Virtual Machines. Devido a esses contratos inteligentes, Ethereum permite que aplicativos descentralizados sejam construídos e executados em sua rede.

O Blockchain Ethereum tem como sua criptomoeda conhecida como Ether. Cada transação nesta cadeia exige que uma taxa de gás seja paga em Ether.

Muitos aplicativos de finanças descentralizadas (DeFi) são construídos na rede da Ethereum, onde estes estão livres de todos os intermediários de transações financeiras como corretora, câmbio, bancos, etc. para utilizar a rede é necessário pagar uma taxa de gás. Essa taxa de gás é necessária para manter a rede descentralizada e funcionando em segurança.

Além das moedas Ether, muitos tokens são construídos sobre Ethereum usando o protocolo ERC-20. Este protocolo define todas as funções necessárias para executar um token no mercado. Um token pode representar qualquer coisa, como uma NFT, moeda, participação de empresa etc. É por isso, que as startups estão criando seus próprios tokens e circulando no mercado em corretoras como Coinbase, Binance, Gate.io, entre outras.

O que é Web3.js?

Web3.js é uma biblioteca que atualmente utiliza a linguagem em JavaScript usada para se comunicar com a Blockchain da Ethereum. Esta poderia ser uma rede Ethereum implantada localmente ou uma rede ao vivo. Essa é uma das principais bibliotecas para a criação de front-ends para interação com contratos inteligentes armazenados na Blockchain.

Você também pode implantar seu próprio aplicativo e acessá-lo usando Web3. Esta biblioteca permite que você conecte seu front-end baseado em JavaScript à rede Ethereum usando HTTP, IPC e WebSockets.

Acessando a rede Ethereum usando Infura

image14

O Web3 pode ser usado para se comunicar com o nó Ethereum, mas, para isso você precisa se conectar com um nó na rede. Assim como quando você deseja se conectar a uma rede torrent, você precisa de um cliente torrent como o BitTorrent. Blockchain é uma rede ponto a ponto, portanto, para se conectar à rede, você precisa se conectar a um ponto ou tornar-se parte da rede.

Para se tornar um nó de mesmo nível, você pode usar Geth, também conhecido como Go Ethereum. Geth é uma biblioteca de código aberto escrita em linguagem Go para implementar o protocolo Ethereum. Depois de executá-lo em seu sistema, você pode conectar seu aplicativo JavaScript com a rede ativa usando Web3 utilizando o endereço que o servidor estiver rodando.

Se você não deseja executar o nó na rede, você pode se conectar a outro nó que esteja executando a rede, a rede Infura é uma delas. Esse tipo de solução são chamadas de Blockchain SASS(Software as a Service). No Infura você pode criar uma conta gratuita, criar um novo projeto e obter a chave API.

O Infura oferece cinco endpoints: um para produção e quatro para redes de teste, Ethereum, ETH2, IPFS, Filecoin. O endpoint de produção é Mainnet os terminais de teste são Ropsten, Kovan, Rinkeby, e Goerli.

Para ficar mais claro o que estamos explicando, vamos agora criar um projeto no Infura para acessarmos a rede Ethereum a um nó Ethereum.

Clique aqui para ser redirecionado diretamente ao site da Infura.

Crie uma conta. Caso já tenha faça o login para começarmos o projeto.

blockchain

Siga o passo a passo assim como mostramos na imagem abaixo.

image16
image3

Após selecionar como demonstrado na imagem, confirme clicando no botão Create ( Criar ).

web3

Ao utilizar a rede Mainnet que é a rede principal do Ethereum, aqui todas execuções escritas serão necessários Ether de verdade.

Se você deseja executar sua própria rede Ethereum localmente, pode usar o Ganache. Ganache não é uma rede Ethereum real, mas sim um emulador local. Isso permite que você teste o protocolo facilmente e sem gastar dinheiro real em gás. Ao usar localmente o Ganache você não terá acesso a nenhum token porque eles estão na cadeia da Mainnet, mas terá acesso a 10 contas com 100 ether cada.

Ethereum

Você pode ver que o servidor RPC está sendo executado na porta 7545 no localhost. Você pode configurar o preço do gás e o limite do gás.

Instalando e executando Web3.js

Como Web3.js é uma biblioteca JavaScript, você pode incluí-la em suas páginas da web ou em qualquer estrutura baseada em JavaScript . Para testar a funcionalidade, vamos executá-lo em nosso computador utilizando o Node.js.

Abra seu Prompt de Comando, acessando a barra inicial do Windows e procure por: “Prompt de comando ou CMD. ATENÇÃO para o correto funcionamento deste tutorial é necessário bastante atenção na escrita das palavras, uma letra maiúscula ou minúscula no lugar errado pode fazer toda a diferença.

web3

Para esse tutorial iremos criar a pasta no desktop, mas você pode criar onde quiser. Após selecionar onde vamos trabalhar devemos criar uma pasta chamada de web3. Caso queira criar a pasta pelo terminal e você ainda não sabe como criá-la, faça igual a imagem abaixo.

Lista de comandos para criar e abrir a pasta no terminal:


					
				

Agora instale Web3.js usando este comando:


					
				

Blockchain

Depois de instalar o Web3.js, digite no console node em seguida pressione enter para confirmar a ação. Em seguida vamos criar uma variável conforme comando abaixo, e clique em enter para confirmar:


					
				

Agora, vamos verificar o que esta variável contém digitando:


					
				

web3
image20
blockchain
ethereum

Este objeto mostra todas as funções que podemos acessar através do Web3.js. As funções específicas do Ethereum ainda não estão disponíveis porque não estamos conectados com a cadeia de blocos. Precisamos conectar com o endpoint do mainnet Infura.

Adicione essa variável ao seu Prompt de comando:


					
				

Agora, se você verificar a web3 encontrará uma lista enorme de funções. Essas funções fornecem todas as informações relacionadas à rede da cadeia Ethereum.

ethereum

De todos esses objetos, estamos interessados ​​nas teclas eth e utils. Contendo as funções de utilitário e funções relacionadas ao Blockchain da Ethereum. web3.utils, web3.eth.

Compreendendo as unidades Ether

É importante saber sobre as diferentes unidades do ether. Se você olhar para o objeto acima, poderá encontrar a unitMap propriedade em utils. Você também pode obter a lista executando este comando:


					
				

web3

A menor unidade é wei e a maior é tether. Existem três unidades importantes, as unidades quais são utilizados para diferentes tarefas: wei, Gwei, e ether(um ether = 1.000.000.000.000.000.000 wei):

Wei : Tudo está representado internamente por  wei. Portanto, se você estiver procurando pelo número de moedas que uma conta possui, ele retornará como  wei pela biblioteca.

Gwei : As taxas de gás são representadas em Gwei. Cada transação precisa pagar as taxas do gás. Essas taxas não são fixas e o tempo de processamento da transação depende de quanto você está disposto a pagar pela taxa de gás, depende também da complexidade da transação, do congestionamento da rede e do incentivo ao minerador, quanto maior o incentivo mais rápido a transação será executada.

Ether: A criptomoeda é representada nesta unidade.

web3.utils fornece duas funções que podem ser usadas para converter uma unidade em outra: toWei e fromWei.toWei converte de outra unidade para Wei.

Formula para converter:


					
				

count_to_convert é o valor que precisa ser convertido. Deve estar na string. unit_to_convert_from é a unidade atual da quantidade (por exemplo, Ether). Use-o assim:


					
				

Ethereum

fromWei é para converter de Wei para outra unidade.


					
				

					
				

image45

Você pode usar essas funções combinadas para converter qualquer unidade.


					
				

Exemplo converter 23 Ether em micro:


					
				

blockchain

Vamos revisar uma série de outras funções, mas antes disso, precisamos examinar o Etherscan.

O que é Etherscan?

Etherscan é o explorador da Blockchain Ethereum. Você pode obter todos os tipos de informações sobre moedas Ether, tokens, contratos inteligentes, contas, etc.

web3

A página inicial exibe as informações relacionadas à moeda Ether. Você pode obter informações sobre tokens pesquisando na barra.

Vamos ver algumas estatísticas por meio do Web3.js – exceto o preço. O preço é uma questão de negociação e o Blockchain não tem nada a ver com isso. O preço é determinado pela oferta e demanda.

Bloco mais recente

Primeiro, obtenha o número do bloco mais recente:


					
				

Observe que estamos usando o then nesta função. Isso exibirá as informações sobre o bloco mais recente.

ethereum

Aqui podemos ver algumas informações do último bloco minerado até o momento da execução desse código.

gasLimit e gasUsed

Você também pode ver o gasLimit e gasUsed.

gasLimit: É o valor máximo que os usuários estão dispostos a pagar para minerar este bloco.

gasUsed: é o valor que foi efetivamente utilizado.

Esse valor é multiplicado por uma taxa básica de gás, ou seja, baseFeePerGas.

image47

Lembre-se de que todos os valores são armazenados na unidade wei. Portanto, a taxa por gás para este bloco é 7606107892 Wei.

Dificuldade

Existem outros parâmetros, como o difficulty que determina a complexidade do quebra-cabeça que os mineradores precisam resolver.

Com isso a complexidade do quebra-cabeça é aumentada a cada bloco, dificultando os mineradores extraírem moedas do bloco.

Para este bloco, a dificuldade é 11.792.543.787.677.561 Se compararmos com a dificuldade do primeiro bloco, veremos outro número enorme.

Dificuldade do primeiro bloco:


					
				

A dificuldade do primeiro bloco foi 17.171.480.576,  para o nosso bloco foi de 11.792.543.787.677.561

Número do bloco:

O objeto também lista o número do bloco na number. Isso significa que 13.856.501 blocos já foram minerados.

Preço do gás

Para obter o preço atual do gás da rede, você pode usar a getGasPrice função de .web3.eth


					
				

					
				

image10

O preço do gás da rede no momento em que este artigo foi escrito é de 79 Gwei.

Acessando informações da conta do Blockchain.

Após criar uma conta, token, moeda, contrato inteligente ou qualquer outra coisa na blockchain resultará na criação de uma hash representada em uma string SHA3. Se você tiver uma conta na Blockchain Ethereum, ela deve ser representada em uma string SHA3 exclusiva.

web3

Estas são as 10 principais contas que possuem moedas Ether. Você pode ver que também existem contas de contrato inteligente. Os contratos também podem conter moedas.

Vamos realizar algumas operações em uma conta. Usaremos a quarta conta da lista, que tem uma etiqueta com o nome de Binance 7.

Primeiro, armazena o endereço da conta em uma variável:

image18


					
				

Você pode ver que o endereço é uma string hexadecimal codificada no algoritmo SHA3.

Para ler o saldo do Ether desta conta:


					
				

ethereum

O número está em wei, então precisamos convertê-lo para Ether:


					
				

Ethereum

Esta conta possui 1.996.008 Ether:

Contagem de transações:


					
				

Ethereum
image22

Etherscan está mostrando 1.010 transações porque também inclui transações recebidas.

Criação de uma nova conta

Você pode criar uma nova conta no Blockchain Ethereum usando Web3.js:


					
				

ethereum

Você pode ver o endereço e a chave privada. Embora eu não vá usar essa conta para nada, ocultei alguns caracteres para proteger alguém de tentar fazer transações por meio dela. Não adicione nenhuma moeda ou token a esta conta, pois ela permanecerá inoperante.

Você pode buscar informações da conta no Etherscan, copie e cole a chave pública na área de busca.

ethereum

Conectando-se a uma rede local Ethereum

Suponha que você esteja desenvolvendo um aplicativo e queira testá-lo. Se você testá-lo em uma rede Ethereum real, terá que pagar uma taxa de gás por qualquer operação que realizar. Essas operações são registradas como transações e, portanto, exigem taxas de gás.

Para resolver esse problema, você pode executar sua rede privada localmente usando Ganache e implantar seu aplicativo nele. Dessa forma, você não vai gastar ou utilizar dinheiro real com taxas de gás. Você precisará pagar as taxas de gás, mas terá todos os Ethers de graça.

Já instalamos o Ganache e vimos que ele está rodando na porta http://127.0.0.1:7545 que é o localhost padrão do ganache.

Você pode visualizar o seu localhost no cabeçalho do ganache.

image34

Você pode visualizar o seu localhost no cabeçalho do ganache.


					
				

Estamos introduzindo o servidor da Ganache na variável web3G, porque a outra variável web3 ja está sendo usada para nos conectar a Infura.

Ganache já nos oferece 10 contas e vamos criar mais uma. Precisaremos usar a propriedade personal da Web3.js assim podemos criar uma conta em nosso nó.

Primeiro, verifique quantas contas temos no Ganache:


					
				

Ethereum

Existem 10 contas. Você também pode ver essas contas na página inicial do Ganache.

Agora vamos criar mais uma usando Web3.js:


					
				

image51

Agora vamos verificar se a nova conta está disponível na lista:

web3

Se abrirmos, o ganache não mostrará a nova conta porque mostra apenas as geradas automaticamente.

Verificando saldo

Podemos facilmente verificar o saldo de qualquer conta como fizemos no tutorial acima:


					
				

A quantidade está em wei  e retornará = 100000000000000000000 que é equivalente a 100 Ether.


					
				

Envio de moedas entre contas

Como estamos no Ganache, podemos ver essa funcionalidade sem gastar nenhum dinheiro real.

Aqui, enviaremos 1 Ether da primeira conta para a segunda conta da lista. Precisaremos fornecer o preço do gás e o limite do gás, por isso é importante saber esses valores.

Para que possamos enviar ethers a rede blockchain necessita do pagamento do gás, o preço do gás varia de acordo se a rede está congestionada quanto mais transações estiverem ocorrendo mais caro essa taxa será, a rede tem um limite máximo de taxa de gás que varia de acordo com a quantidade de transferências, vamos manter nosso valor de pagamento de taxa um pouco menor, se escolhermos uma taxa de gás muito baixa nosso bloco não será mineirado.

Ethereum

Se você ver na imagem acima, o Ganache está fornecendo os seguintes valores.

  • Preço do gás: 20000000000
  • Limite de gás: 6721975

Em nossa transação, definiremos o limite de gás de 6500000 :


					
				

Isso retornará as informações da transação:

blockchain

Como você pode ver, o gás usado foi 21.000 – embora tenhamos colocado 6.500.000. Portanto, o custo total pago em gás = 21000 * 20000000000 wei = 0,00042 Éter.


					
				

Conta que enviou :

image12

Conta que recebeu :

web3

Também poderemos verificar o resultado no Ganache:

blockchain

Você pode obter mais informações nas guias Blocos e Transações :

ethereum
web3

Acessando tokens usando Web3.js

Ether é uma moeda e tudo o mais implementado na cadeia usando contratos inteligentes são tokens. Os tokens usados ​​para negociação precisam ser implementados usando o protocolo ERC-20. Isso define o conjunto de regras a seguir.

Se você verificar no Etherscan, encontrará a lista de todos os tokens ERC-20 na rede.

Ethereum

Vamos escolher um token e realizar as operações sobre ele. Para este tutorial, estou escolhendo o BNB.

Ao abri-lo no Etherscan, você encontrará informações como endereço do contrato, fornecimento total de tokens, titulares, etc.

web3

Se você clicar no endereço do contrato (destacado em vermelho), você obterá informações úteis sobre ele.

image54

Não falamos sobre a criação de um contrato inteligente porque isso está fora do escopo deste artigo. Para simplificar, um contrato inteligente possui código capaz de ser usado pelo ecossistema da Blockchain. Cada aplicação numa Blockchain tem seu código dentro de um contrato inteligente. Este código está escrito na linguagem Solidity.

Esta página do contrato no Etherscan mostra o código Solidity do token BNB:

image6

Quando este código é compilado, um bytecode e um objeto JSON são criados, o que é conhecido como contrato ABI. Este arquivo ABI contém as definições das funções, que foram declaradas no código do Solidity.

Você também pode encontrar o ABI para BNB rolando a página para baixo no Etherscan:

image7

Este código Solidity e ABI não são específicos para o token BNB porque são funções padrão definidas no protocolo ERC-20.

Você pode estar pensando que, se o código Solidity não é específico do BNB, como ele obteve seu símbolo, suprimento total e todas as outras propriedades? Essas informações foram passadas como argumentos para o construtor.

Aqui estão os argumentos:

image33

Mas como eles são passados ​​para o construtor? Ao anexar ao código de byte do contrato.

Primeiro, esses argumentos são convertidos em bytecodes:

image19

Esses diferentes bytecodes são unidos em uma única string. Vamos chamar o seguinte argumento bytecode:

image26

Sabemos que o código-fonte do contrato é compilado em bytecode e ABI. Portanto, seu bytecode se parece com este:

image35

Este bytecode é uma representação de baixo nível do código Solidity para contratos inteligentes. Ele é criado quando o código Solidity é compilado por Ethereum Virtual Machine (EVM). Para passar os argumentos para um construtor Solidity, o bytecode do argumento é anexado a este bytecode do contrato.

O bytecode completo do contrato será semelhante a imagem abaixo destacado em azul:

image15

Trabalhando com contratos em Web3.js

Para trabalhar com contratos em Web3.js, precisamos de duas coisas: a ABI e o endereço do contrato. Já aprendemos o que é ABI e como obtê-lo e também sabemos o endereço do contrato.

Web3.js fornece uma propriedade chamada Contract na propriedade eth. Precisamos instanciá-lo e armazená-lo em uma variável.

Existem duas formas de fazer isso, podemos passar as variáveis separadas e depois criar a nova variável newContract.

A variável ABI você pegará do contrato ABI no Etherscan copie e cole na variável.

image7 1


					
				

Ou podemos passar as variáveis direto a variável newContract :

image44

Agora podemos realizar diferentes operações sobre este newContract objeto. Os vários métodos são definidos no ramo. Você pode executá-lo no nó e verificar a lista:newContract.methods

image52

Se você deseja obter o nome do token, execute:


					
				

image46

Para obter o fornecimento total, execute:


					
				

image37

Conclusão

Neste tutorial, cobrimos os conceitos básicos de Web3.js, Blockchain, Ethereum, Infura, Ganache, contratos inteligentes, tokens entre outros.

Se você está procurando entrar no mundo do desenvolvimento de Blockchain e DApp, suas próximas etapas devem incluir familiarizar-se com a solidity , MetaMask, aprender como criar e implementar contratos inteligentes.

O mundo do Blockchain é enorme, evolui rapidamente e está cheio de possibilidades. Espero que este tutorial tenha dado a você a motivação de que você precisa para seguir em frente em sua jornada de Blockchain.

links

Ethereum blockchain development using web3.js clique aqui.

Etherscan clique aqui.

Ganache clique aqui.

Ethereum e Blockchain clique aqui.

Infura clique aqui.

Aviso Legal: Esta postagem é apenas para fins educacionais. Não constitui um conselho de investimento ou uma recomendação ou solicitação para comprar ou vender qualquer investimento e não deve ser usado na avaliação do mérito da tomada de qualquer decisão de investimento. Não deve ser invocado para aconselhamento contábil, jurídico ou tributário ou recomendações de investimento.

Postagens recentes

blog
Caio Sá

Fidelidade 3.0

Fidelidade 3.0 Programas de fidelidade a marcas têm existido há bastante tempo. Fidelidade importa muito as marcas, pois os benefícios de reter clientes existentes compensa

Read More »
blog
Talita Paes

Celebridades que utilizam NFTs

Celebridades que utilizam NFTs Por que celebridades como Neymar e Justin Bieber estão de olho nas NFTs Os NFTs caíram no gosto de celebridades, nomes

Read More »
EnglishPortuguêsEspañol