SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
22.11.2024

Lição: 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!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!