SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
29.11.2024

Lição: 171: Rollups Otimistas

Os Rollups Otimistas são uma solução de escalabilidade de camada 2 para blockchains que aumentam significativamente o throughput de transações, mantendo a segurança da blockchain subjacente de camada 1. Esta aula irá explorar os conceitos por trás dos Rollups Otimistas, fornecendo exemplos de como eles funcionam e como você pode interagir com eles usando contratos inteligentes.

O que são Rollups Otimistas?

Os Rollups Otimistas agrupam várias transações em um único lote, que é então enviado para a blockchain de camada 1. Eles operam sob a suposição de que todas as transações são válidas. Portanto, em vez de verificar cada transação individualmente antes de adicioná-la ao rollup, os Rollups Otimistas confiam em provas de fraude para garantir a honestidade.

Características Principais

  • Escalabilidade: Maior throughput por meio do agrupamento de transações.
  • Taxas Reduzidas: Custo mais baixo por transação em comparação à camada 1.
  • Confiança, mas com Verificação: Assume que as transações são válidas até que se prove o contrário.
  • Provas de Fraude: Usuários podem contestar transações incorretas.

Como Funcionam os Rollups Otimistas

  1. Coleta de Transações: Usuários enviam suas transações para a cadeia Rollup.
  2. Agrupamento: As transações são coletadas e reunidas em um único bloco Rollup.
  3. Envio: O bloco Rollup é enviado para a blockchain de camada 1.
  4. Período de Contestação: Um período definido durante o qual os participantes podem contestar a validade das transações.
  5. Finalização: Se não houver contestações, o estado se torna final. Se uma contestação for levantada, a transação é validada na camada 1.

Exemplo de um Contrato Inteligente Simples para um Rollup Otimista

Neste exemplo, vamos escrever um contrato inteligente simples em Solidity que pode ser usado dentro de um ambiente de Rollup Otimista. Este contrato permitirá que os usuários depositem e retirem fundos.

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

contract SimpleRollup {
    mapping(address => uint256) public balances;

    event Deposited(address indexed user, uint256 amount);
    event Withdrawn(address indexed user, uint256 amount);

    function deposit() external payable {
        require(msg.value > 0, "O valor do depósito deve ser maior que zero");

        // Atualiza o saldo
        balances[msg.sender] += msg.value;

        emit Deposited(msg.sender, msg.value);
    }

    function withdraw(uint256 amount) external {
        require(balances[msg.sender] >= amount, "Saldo insuficiente");

        // Atualiza o saldo
        balances[msg.sender] -= amount;

        // Transfere os fundos
        payable(msg.sender).transfer(amount);

        emit Withdrawn(msg.sender, amount);
    }
}

Explicação do Contrato Inteligente

  • Mapping: O mapping balances mantém os saldos de cada usuário.
  • Função de Depósito: Os usuários podem depositar Ether, o que atualiza seu saldo e emite um evento Deposited.
  • Função de Retirada: Os usuários podem retirar Ether até o saldo disponível, atualizando os estados conforme necessário e emitindo um evento Withdrawn.

Integração com Rollups Otimistas

Para implantar o contrato acima nos Rollups Otimistas, você normalmente interagiria com uma solução de camada 2, como Optimism ou Arbitrum. Os passos de implantação geralmente envolvem:

  1. Conectar-se à Rede Rollup: Configure seu ambiente de desenvolvimento para apontar para o endpoint RPC do Rollup.
  2. Implantar o Contrato: Use ferramentas como Truffle ou Hardhat para implantar seu contrato.
  3. Interagir com o Contrato: Você pode enviar transações para o contrato, que serão processadas pela cadeia Rollup.

Exemplo de Interação

Aqui está um exemplo de como você poderia interagir com o contrato implantado usando JavaScript e ethers.js:

const { ethers } = require("ethers");

// Conectar-se a um provedor de Rollup Otimista
const provider = new ethers.providers.JsonRpcProvider("https://optimism-mainnet.infura.io/v3/YOUR_INFURA_PROJECT_ID");
const wallet = new ethers.Wallet("YOUR_PRIVATE_KEY", provider);

// O endereço do contrato SimpleRollup implantado
const contractAddress = "YOUR_CONTRACT_ADDRESS";
const contract = new ethers.Contract(contractAddress, [
    "function deposit() public payable",
    "function withdraw(uint256 amount) public",
    "function balances(address) public view returns (uint256)"
], wallet);

async function main() {
    // Depositar fundos
    const txDeposit = await contract.deposit({ value: ethers.utils.parseEther("1.0") });
    await txDeposit.wait();
    console.log("Depositados 1 ETH!");

    // Retirar fundos
    const balance = await contract.balances(wallet.address);
    if (balance.gt(0)) {
        const txWithdraw = await contract.withdraw(balance);
        await txWithdraw.wait();
        console.log(`Retirados ${ethers.utils.formatEther(balance)} ETH!`);
    }
}

main().catch(console.error);

Conclusão

Os Rollups Otimistas representam uma abordagem promissora para escalar blockchains, permitindo maior throughput e taxas mais baixas, mantendo a segurança e a confiança. Ao entender como implementar e interagir com contratos inteligentes neste ambiente, os desenvolvedores podem aproveitar os benefícios oferecidos pelas soluções de camada 2.

Nesta aula, exploramos os conceitos fundamentais dos Rollups Otimistas, implementamos um contrato simples e demonstramos sua interação em uma plataforma Rollup usando JavaScript. À medida que você continua sua jornada no desenvolvimento de blockchain, considere experimentar com aplicações mais complexas que utilizem Rollups Otimistas para desbloquear todo o seu potencial.

Video

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

Thank you for voting!