Aula 100: Interagindo com Contratos via Web3.js
No mundo do Ethereum e das aplicações descentralizadas (dApps), os contratos inteligentes desempenham um papel crucial. No entanto, interagir com esses contratos a partir de uma aplicação frontend requer uma ponte, e é aí que o Web3.js entra em ação. Esta aula irá guiá-lo pelo processo de uso do Web3.js para interagir com contratos inteligentes no Ethereum.
O que é Web3.js?
Web3.js é uma biblioteca JavaScript que permite interagir com a blockchain do Ethereum. Ela fornece funções para enviar transações, implantar contratos, chamar funções de contratos implantados, e muito mais. Com Web3.js, você pode facilmente se comunicar com contratos inteligentes a partir de suas aplicações JavaScript.
Instalando o Web3.js
Antes de você poder usar o Web3.js, é necessário instalá-lo. Certifique-se de que você tem o Node.js e o npm instalados em sua máquina. Você pode instalar o Web3.js usando o npm:
npm install web3
Uma vez instalado, você pode importar o Web3.js em seu projeto:
const Web3 = require('web3');
Conectando ao Ethereum
Para interagir com a blockchain do Ethereum, você precisa criar uma instância do Web3 e conectá-la a um nó do Ethereum. Você pode usar o Infura como seu provedor de serviços ou conectar-se a um nó local.
Veja como se conectar a um nó do Infura:
const web3 = new Web3(new Web3.providers.HttpProvider('https://mainnet.infura.io/v3/SUA_CHAVE_DO_PROJETO_INFURA'));
Interagindo com um Contrato Inteligente
Para interagir com um contrato inteligente, você precisa do seu ABI (Interface Binária de Aplicação) e do endereço do contrato. O ABI é uma representação JSON das funções e eventos do contrato, que você pode obter quando compila seu contrato inteligente.
Exemplo: Contrato de Token ERC20
Vamos supor que queiramos interagir com um contrato padrão de token ERC20. Aqui está um exemplo de como você pode obter o saldo de um endereço no Ethereum usando o Web3.js.
1. Configurando o ABI e o Endereço do Contrato
Substitua SEU_ENDERECO_DO_CONTRATO
e SEU_ABI
pelo endereço e ABI reais do seu token.
const contractAddress = "SEU_ENDERECO_DO_CONTRATO";
const abi = [
// ABI mínimo do ERC20
{
"constant": true,
"inputs": [{ "name": "owner", "type": "address" }],
"name": "balanceOf",
"outputs": [{ "name": "", "type": "uint256" }],
"payable": false,
"stateMutability": "view",
"type": "function"
}
];
2. Criando a Instância do Contrato
Agora, você pode criar uma instância do contrato:
const contract = new web3.eth.Contract(abi, contractAddress);
3. Obtendo o Saldo
Agora, podemos obter o saldo de um endereço específico do Ethereum:
const address = "SEU_ENDERECO_ETHEREUM";
contract.methods.balanceOf(address).call()
.then(balance => {
console.log(`Saldo do endereço ${address}: ${balance}`);
})
.catch(err => {
console.error("Erro ao obter saldo:", err);
});
Enviando Transações
Se você quiser enviar uma transação para uma função do contrato, precisará de uma conta do Ethereum que possua ETH para cobrir as taxas de gás.
1. Configurando sua Conta
Você pode definir sua conta do Ethereum usando uma chave privada ou conectando um provedor de carteira como o MetaMask em uma aplicação frontend. Aqui, usaremos uma chave privada apenas para fins de demonstração.
const privateKey = 'SUA_CHAVE_PRIVADA';
const account = web3.eth.accounts.privateKeyToAccount(privateKey);
web3.eth.accounts.wallet.add(account);
web3.eth.defaultAccount = account.address;
2. Enviando uma Transação
Abaixo está um exemplo de envio de uma transação para uma função do contrato:
const amountToSend = web3.utils.toWei('1', 'ether'); // Exemplo de valor
contract.methods.transfer('ENDERECO_DO_DESTINATARIO', amountToSend).send({
from: web3.eth.defaultAccount,
gas: 3000000
})
.then(receipt => {
console.log('Transação bem-sucedida com recibo: ', receipt);
})
.catch(err => {
console.error('Transação falhou: ', err);
});
Conclusão
Nesta aula, aprendemos como configurar o Web3.js, conectar-se à rede Ethereum, interagir com um contrato inteligente e realizar operações de leitura e escrita. Com esse conhecimento básico, você pode construir dApps que aproveitam o poder dos contratos inteligentes no Ethereum.
Fique à vontade para explorar contratos e métodos mais complexos à medida que desenvolve suas habilidades mais adiante no mundo do desenvolvimento em blockchain!