Pular para o conteúdo principal

Configure o web3.js para usar a Ethereum blockchain em JavaScript

web3.jsjavascript
Intermediário
jdourlens
EthereumDev(opens in a new tab)
11 de abril de 2020
3 minutos de leitura minute read
comp-tutorial-metadata-tip-author 0x19dE91Af973F404EDF5B4c093983a7c6E3EC8ccE

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 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")
3
4web3.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 latestBlockNumber
5}
6
7getBlockNumber()
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 needed
5 await window.ethereum.enable()
6 // Accounts now exposed
7 } catch (error) {
8 // User denied account access...
9 }
10}
Exibir tudo
Copiar

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: @rafarocha(opens in a new tab), 19 de janeiro de 2024

Este tutorial foi útil?