SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
05.12.2024

Lição 237: Construindo Mercados Descentralizados

Nesta lição, vamos explorar o fascinante mundo dos mercados descentralizados. Vamos aprender a criar um mercado simples usando Solidity, permitindo que os usuários comprem e vendam itens sem depender de entidades centralizadas. O mercado implementará funcionalidades básicas, como listar itens, comprar itens e recuperar detalhes dos itens.

Pré-requisitos

  • Compreensão básica de Solidity e Ethereum
  • Familiaridade com contratos inteligentes e aplicações descentralizadas (dApps)
  • Acesso a um ambiente de desenvolvimento como Remix ou Truffle para implantar contratos inteligentes

Visão Geral do Contrato Inteligente

Um contrato inteligente de mercado descentralizado terá as seguintes funcionalidades principais:

  1. Listar itens: Os usuários podem listar itens para venda.
  2. Comprar itens: Os compradores podem adquirir itens listados.
  3. Recuperar detalhes dos itens: Os usuários podem visualizar os detalhes dos itens disponíveis para venda.

Vamos criar um exemplo simples onde os usuários podem listar e comprar itens em um contrato Solidity.

Contrato de Mercado Simplificado

Aqui está uma implementação simples de um mercado descentralizado:

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

contract MercadoDescentralizado {
    struct Item {
        uint id;
        address payable vendedor;
        string nome;
        string descricao;
        uint preco;
        bool vendido;
    }

    mapping(uint => Item) public itens;
    uint public contagemItens;

    event ItemListados(uint id, address vendedor, string nome, uint preco);
    event ItemVendido(uint id, address comprador);

    // Função para listar um novo item
    function listarItem(string memory _nome, string memory _descricao, uint _preco) public {
        require(_preco > 0, "O preço deve ser maior que zero");

        contagemItens++;
        itens[contagemItens] = Item(contagemItens, payable(msg.sender), _nome, _descricao, _preco, false);
        emit ItemListados(contagemItens, msg.sender, _nome, _preco);
    }

    // Função para comprar um item
    function comprarItem(uint _id) public payable {
        Item storage item = itens[_id];

        require(_id > 0 && _id <= contagemItens, "Item não existe");
        require(msg.value >= item.preco, "Ether insuficiente enviado");
        require(!item.vendido, "Item já vendido");

        item.vendedor.transfer(item.preco);
        item.vendido = true;

        emit ItemVendido(_id, msg.sender);
    }

    // Função para recuperar detalhes do item
    function obterItem(uint _id) public view returns (Item memory) {
        require(_id > 0 && _id <= contagemItens, "Item não existe");
        return itens[_id];
    }
}

Explicação do Código

  1. Definição de Estrutura: Definimos uma estrutura Item que contém os detalhes do item, incluindo id, vendedor, nome, descricao, preco e status de vendido.

  2. Variáveis de Estado: Mantemos um mapeamento dos itens e um contador para o total de itens listados.

  3. Eventos: Definimos dois eventos (ItemListados e ItemVendido) que ajudam a rastrear ações do mercado.

  4. Função listarItem: Esta função permite que os usuários listem itens para venda. Ela verifica se o preço é maior que zero e incrementa a contagem de itens.

  5. Função comprarItem: Esta função permite que os usuários adquiram um item. Ela verifica se o item existe, se Ether suficiente foi enviado e se o item ainda não foi vendido. Após a compra bem-sucedida, o preço é transferido para o vendedor e o item é marcado como vendido.

  6. Função obterItem: Esta função permite que os usuários busquem os detalhes de um item pelo ID do item.

Testando o Mercado

Você pode usar este contrato em um ambiente de desenvolvimento como o Remix. Siga estes passos para testar:

  1. Implantar o Contrato: Compile e implemente o contrato MercadoDescentralizado no Remix.

  2. Listar Itens: Chame a função listarItem com parâmetros para nome, descrição e preço. Certifique-se de que o preço seja maior que zero.

  3. Comprar Itens: Chame a função comprarItem com o ID do item e envie o Ether necessário.

  4. Recuperar Detalhes do Item: Chame a função obterItem para recuperar os detalhes do item pelo ID.

Conclusão

Nesta lição, abordamos o básico de como criar um mercado descentralizado usando Solidity. Este contrato simples fornece a funcionalidade fundamental para listar itens, comprá-los e recuperar informações sobre os itens.

Você pode expandir este mercado adicionando recursos como sistemas de avaliação, feedback, ou até mesmo venda baseada em leilão. As aplicações potenciais para mercados descentralizados são vastas, e entender os fundamentos oferece grandes oportunidades para o desenvolvimento no espaço blockchain.

Video

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

Thank you for voting!