Configure o web3.js para usar a Ethereum blockchain em JavaScript
Neste tutorial, vamos ver como começar com web3.js(opens in a new tab) para interagir com a blockchain Ethereum. Web3.js podem ser usados em frontend e backends para ler dados da blockchain, fazer transações e até mesmo implantar contratos inteligentes.
O primeiro passo é incluir web3.js no seu projeto. Para usá-la em uma página da web, você pode importar a biblioteca diretamente usando um CDN como JSDeliver.
1<script src="https://cdn.jsdelivr.net/npm/web3@latest/dist/web3.min.js"></script>
Se você preferir instalar a biblioteca para usar em seu backend ou um projeto do frontend que usa build, você pode instalá-la usando o npm:
npm install web3 --save
Em seguida, para importar o Web3.js em um script Node.js ou projeto front-end do Browserify, você pode usar a seguinte linha de JavaScript:
1const Web3 = require("web3")Copiar
Agora que incluímos a biblioteca no projeto, precisamos inicializá-la. Seu projeto precisa ser capaz de se comunicar com a blockchain. A maioria das bibliotecas Ethereum se comunicam com um nó através de chamadas RPC. Para iniciar nosso provedor Web3, nós criaremos uma instância Web3 passando como construtor a URL do provedor. Se você tiver uma instância de um nó ou ganache executando no seu computador(opens in a new tab) será parecido com isto:
1const web3 = new Web3("http://localhost:8545")Copiar
Se você deseja acessar diretamente um nó hospedado, poderá encontrar opções em nós como um serviço.
1const web3 = new Web3("https://cloudflare-eth.com")Copiar
Para testar se configuramos corretamente nossa instância Web3, tentaremos recuperar o número do último bloco usando a função getBlockNumber
. Esta função aceita uma chamada de callback como parâmetro e retorna o número do bloco como um inteiro.
1var Web3 = require("web3")2const web3 = new Web3("https://cloudflare-eth.com")34web3.eth.getBlockNumber(function (error, result) {5 console.log(result)6})Copiar
Se você executar este programa, ele simplesmente imprimirá o bloco mais recente: o topo do blockchain. Você também pode usar chamadas de função await/async
para evitar aninhar (encadear por identação) chamadas de callback em seu código:
1async function getBlockNumber() {2 const latestBlockNumber = await web3.eth.getBlockNumber()3 console.log(latestBlockNumber)4 return latestBlockNumber5}67getBlockNumber()Copiar
Você pode ver todas as funções disponíveis da instância Web3 na documentação oficial do web3.js(opens in a new tab).
A maioria das bibliotecas Web3 são assíncronas porque em segundo plano a biblioteca faz chamadas JSON RPC para o nó que envia os resultados.
Se você estiver trabalhando no navegador, algumas carteiras injetam diretamente uma instância Web3, e você deveria tentar usá-la sempre que possível, especialmente se planeja interagir com o endereço Ethereum do usuário para fazer transações.
Aqui está o trecho de código para detectar se uma carteira MetaMask está disponível e tentar habilitá-la se estiver. Isso permitirá mais tarde você ler o saldo do usuário e permitir-lhe-á validar as transações que gostaria de fazer na blockchain Ethereum:
1if (window.ethereum != null) {2 state.web3 = new Web3(window.ethereum)3 try {4 // Request account access if needed5 await window.ethereum.enable()6 // Accounts now exposed7 } catch (error) {8 // User denied account access...9 }10}Exibir tudoCopiar
Alternativas para web3.js como Ethers.js(opens in a new tab) existem e também são comumente usadas. No próximo tutorial, veremos como escutar facilmente novos blocos recebidos na blockchain e ver o que eles contêm(opens in a new tab).
Última edição: @corwintines(opens in a new tab), 28 de junho de 2024