SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
29.11.2024

Lição 174: Interagindo com Contratos de Camada 2

À medida que o ecossistema Ethereum evolui, soluções de Camada 2 como Polygon, Optimism e Arbitrum ganharam imensa popularidade por fornecer escalabilidade e custos de transação mais baixos. Nesta lição, vamos explorar como interagir com contratos de Camada 2 usando Solidity e Web3.js.

Entendendo Soluções de Camada 2

As soluções de Camada 2 são construídas sobre a blockchain do Ethereum e têm como objetivo descarregar algumas das transações da cadeia principal do Ethereum (Camada 1). Isso ajuda a reduzir a congestão e as taxas de gás, aproveitando ainda a segurança do Ethereum.

As soluções comuns de Camada 2 incluem:

  • Polygon: Uma solução de escalabilidade multi-chain.
  • Rollups Otimistas: Uma técnica de escalabilidade que permite transações mais rápidas, ainda se baseando na segurança do Ethereum.
  • Rollups de Conhecimento Zero: Utiliza provas criptográficas para agrupar várias transações em uma só.

Nesta lição, demonstraremos como interagir com um contrato inteligente simples implantado em uma rede de Camada 2 usando Solidity para o contrato e Web3.js para a interação.

Exemplo de Contrato Inteligente

Vamos primeiro criar um contrato inteligente simples em Solidity que podemos implantar em uma rede de Camada 2.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract SimpleStorage {
    uint256 private data;

    event DataStored(uint256 indexed value);

    function store(uint256 _data) public {
        data = _data;
        emit DataStored(_data);
    }

    function retrieve() public view returns (uint256) {
        return data;
    }
}

Explicação

  1. Variável de Estado: data armazena um número inteiro sem sinal.
  2. Evento: DataStored é emitido sempre que um novo valor é armazenado.
  3. Funções:
    • store: Armazena um valor e emite um evento.
    • retrieve: Retorna o valor armazenado.

Implantando o Contrato em Camada 2

Para implantar o contrato SimpleStorage em uma rede de Camada 2 como Polygon, você pode seguir os passos abaixo utilizando o framework Truffle ou Hardhat. Certifique-se de que seu ambiente esteja corretamente configurado com as configurações necessárias.

  1. Instalar Pacotes Necessários:
npm install --save-dev @nomiclabs/hardhat ethers
  1. Adicionar a Configuração da Sua Rede de Camada 2: Por exemplo, no hardhat.config.js:
require('@nomiclabs/hardhat-waffle');

module.exports = {
    solidity: "0.8.0",
    networks: {
        polygon_mumbai: {
            url: 'https://rpc-mumbai.maticvigil.com',
            accounts: ['SUA_CHAVE_PRIVADA']
        }
    }
};

Substitua SUA_CHAVE_PRIVADA pela chave privada da sua carteira (atenção para não expô-la).

  1. Implantar o Contrato:

Crie um script de implantação na pasta scripts nomeado deploy.js.

const hre = require("hardhat");

async function main() {
    const SimpleStorage = await hre.ethers.getContractFactory("SimpleStorage");
    const simpleStorage = await SimpleStorage.deploy();

    await simpleStorage.deployed();
    console.log("SimpleStorage implantado em:", simpleStorage.address);
}

main()
    .then(() => process.exit(0))
    .catch((error) => {
        console.error(error);
        process.exit(1);
    });

Execute o script de implantação:

npx hardhat run scripts/deploy.js --network polygon_mumbai

Interagindo com o Contrato Usando Web3.js

Após a implantação do contrato, você pode interagir com ele usando Web3.js. Abaixo está um exemplo de como fazer isso em um arquivo JavaScript.

  1. Instalar Web3.js:
npm install web3
  1. Criar um Arquivo JavaScript: Por exemplo, interact.js.
const Web3 = require('web3');
const contractABI = [
    // ABI gerado pelo compilador Solidity ou ferramentas como Remix
];
const contractAddress = 'SEU_ENDERECO_DE_CONTRATO'; // Substitua pelo endereço do seu contrato implantado

const main = async () => {
    const web3 = new Web3('https://rpc-mumbai.maticvigil.com'); // Conectar à Camada 2
    const account = 'SEU_ENDERECO_DE_CARTEIRA'; // Substitua pelo seu endereço de carteira

    const simpleStorage = new web3.eth.Contract(contractABI, contractAddress);

    // Armazenar um valor
    const storeValue = async (value) => {
        const tx = {
            from: account,
            to: contractAddress,
            gas: 2000000,
            data: simpleStorage.methods.store(value).encodeABI(),
        };

        const signedTx = await web3.eth.accounts.signTransaction(tx, 'SUA_CHAVE_PRIVADA'); // Assinar a transação
        await web3.eth.sendSignedTransaction(signedTx.rawTransaction); // Enviar a transação
        console.log(`Valor armazenado: ${value}`);
    };

    // Recuperar o valor armazenado
    const retrieveValue = async () => {
        const value = await simpleStorage.methods.retrieve().call();
        console.log(`O valor armazenado é: ${value}`);
    };

    await storeValue(42); // Armazenar o número 42
    await retrieveValue(); // Recuperar o valor
};

main().catch(console.error);

Usando o Arquivo JavaScript

Execute seu script de interação com Node.js:

node interact.js

Certifique-se de substituir espaços reservados como SEU_ENDERECO_DE_CONTRATO, SEU_ENDERECO_DE_CARTEIRA e SUA_CHAVE_PRIVADA por valores reais.

Conclusão

Nesta lição, cobrimos como implantar um contrato simples em Solidity em uma rede de Camada 2 e interagir com ele usando Web3.js. Soluções de Camada 2 melhoram significativamente a experiência com Ethereum ao aumentar a escalabilidade e reduzir os custos de transação, tornando-se uma parte essencial do ecossistema Ethereum. Continue experimentando com soluções de Camada 2 e explore suas características únicas à medida que evoluem!

Video

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

Thank you for voting!