Bài học 2

Listagem e negociação de itens

Nesta lição, expandiremos nosso contrato de item para lidar com a listagem e negociação de itens em nosso mercado. Aprenderemos como adicionar, listar e remover itens, bem como os princípios básicos de compra e venda de itens. Também aprenderemos como implantar nosso contrato e interagir com ele no Remix IDE.

Construindo o Contrato de Mercado

Agora transformaremos nosso contrato Item simples em um contrato Marketplace mais complexo. O contrato do Marketplace manterá uma lista de itens à venda, fornecerá uma maneira para os usuários listarem novos itens à venda e fornecerá uma maneira para os usuários comprarem itens.

Para fazer isso, adicionaremos alguns novos recursos ao nosso contrato:

  1. Cada item agora terá um endereço seller , que representa o proprietário do item.

  2. Apresentaremos uma nova função listItemForSale que permite aos usuários listar novos itens à venda.

  3. Apresentaremos uma nova função buyItem que permite aos usuários comprar um item.

Esta é a aparência do contrato do Marketplace :

Solidez 
 // Identificador de licença SPDX: solidez do pragma MIT 
 ^0.8.6; 

 contract Marketplace { 
 // Define uma nova estrutura para os itens 
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Array para conter todos os itens 
 Item[] public items; 

 // Evento que será emitido quando um novo item for criado 
 event NewItem(uint itemId, string itemName, uint itemPrice, address seller); 

 // Evento que será emitido quando um item for colocado à venda 
 event ItemListed(uint itemId, string itemName, uint itemPrice, address seller); 

 // Evento que será emitido quando um item for comprado 
 event ItemBought(uint itemId, string itemName, uint itemPrice, endereço vendedor, endereço comprador); 

 // Função para criar um novo item, mas não listá-lo para venda imediatamente 
 function createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }


    // Função para listar um item para venda 
 function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

    // Função para comprar um item 
 function buyItem(uint _itemId) public payable {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

Neste contrato temos:

  1. Uma estrutura Item que agora inclui um endereço seller e um booleano forSale . O seller é o proprietário do item e forSale indica se o item está atualmente listado para venda.

  2. Uma função createItem que cria um novo item e atribui msg.sender como vendedor. O msg.sender é uma variável global no Solidity que representa o endereço da pessoa (ou contrato inteligente) que é chamada de função atual. No entanto, o item não está listado para venda imediatamente.

  3. Uma função listItemForSale que permite ao vendedor de um item listá-lo para venda. Usamos a função require para garantir que apenas o vendedor possa listar o item à venda.

  4. Uma função buyItem que permite que alguém compre um item. A função verifica se o item está à venda, se o comprador não é o vendedor e se o preço correto foi enviado. Se essas condições forem atendidas, a função envia o dinheiro ao vendedor e marca o item como não à venda.

Implantando e interagindo com o contrato do Marketplace

Depois de redigir o contrato Marketplace , a próxima etapa é compilá-lo e implantá-lo. Você pode usar o plugin Solidity Compiler no Remix para compilar o contrato, assim como fizemos na Lição 1.

Para implantar o contrato, acesse o plugin Deploy & Run Transactions (aquele com o ícone do cubo) no painel direito. Escolha o ambiente apropriado (JavaScript VM para simulação), selecione o contrato do Marketplace no menu suspenso Contrato e clique no botão Implantar.

Assim que o contrato for implantado, ele aparecerá na seção Contratos Implantados. Você pode expandi-lo para ver suas variáveis e funções de estado público. Você pode criar, listar e comprar itens chamando essas funções.

Para criar um item, insira um nome e um preço e clique no botão createItem . Para listar um item à venda, insira o ID do item e clique no botão listItemForSale . Para comprar um item, insira o ID do item, envie a quantidade correta de Ether e clique no botão buyItem .

Parabéns! Agora você sabe como criar um mercado descentralizado básico na blockchain Ethereum.

Na próxima lição, melhoraremos nosso mercado adicionando funcionalidades para remover itens da venda e atualizar o preço de um item. Fique atento!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.
Danh mục
Bài học 2

Listagem e negociação de itens

Nesta lição, expandiremos nosso contrato de item para lidar com a listagem e negociação de itens em nosso mercado. Aprenderemos como adicionar, listar e remover itens, bem como os princípios básicos de compra e venda de itens. Também aprenderemos como implantar nosso contrato e interagir com ele no Remix IDE.

Construindo o Contrato de Mercado

Agora transformaremos nosso contrato Item simples em um contrato Marketplace mais complexo. O contrato do Marketplace manterá uma lista de itens à venda, fornecerá uma maneira para os usuários listarem novos itens à venda e fornecerá uma maneira para os usuários comprarem itens.

Para fazer isso, adicionaremos alguns novos recursos ao nosso contrato:

  1. Cada item agora terá um endereço seller , que representa o proprietário do item.

  2. Apresentaremos uma nova função listItemForSale que permite aos usuários listar novos itens à venda.

  3. Apresentaremos uma nova função buyItem que permite aos usuários comprar um item.

Esta é a aparência do contrato do Marketplace :

Solidez 
 // Identificador de licença SPDX: solidez do pragma MIT 
 ^0.8.6; 

 contract Marketplace { 
 // Define uma nova estrutura para os itens 
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Array para conter todos os itens 
 Item[] public items; 

 // Evento que será emitido quando um novo item for criado 
 event NewItem(uint itemId, string itemName, uint itemPrice, address seller); 

 // Evento que será emitido quando um item for colocado à venda 
 event ItemListed(uint itemId, string itemName, uint itemPrice, address seller); 

 // Evento que será emitido quando um item for comprado 
 event ItemBought(uint itemId, string itemName, uint itemPrice, endereço vendedor, endereço comprador); 

 // Função para criar um novo item, mas não listá-lo para venda imediatamente 
 function createItem(string memory _name, uint _price) public {
    items.push(Item(_name, _price, payable(msg.sender), false)); // We need to explicitly convert msg.sender to 'address payable'
    emit NewItem(items.length - 1, _name, _price, msg.sender);
    }


    // Função para listar um item para venda 
 function listItemForSale(uint _itemId) public {
        Item storage item = items[_itemId];
        require(msg.sender == item.seller, "Only the owner can list the item for sale");
        item.forSale = true;
        emit ItemListed(_itemId, item.name, item.price, item.seller);
    }

    // Função para comprar um item 
 function buyItem(uint _itemId) public payable {
        Item storage item = items[_itemId];
        require(msg.sender != item.seller, "Seller cannot buy their own item");
        require(item.forSale, "Item is not for sale");
        require(msg.value == item.price, "Incorrect price sent");
        item.seller.transfer(msg.value);
        item.forSale = false;
        emit ItemBought(_itemId, item.name, item.price, item.seller, msg.sender);
    }
}

Neste contrato temos:

  1. Uma estrutura Item que agora inclui um endereço seller e um booleano forSale . O seller é o proprietário do item e forSale indica se o item está atualmente listado para venda.

  2. Uma função createItem que cria um novo item e atribui msg.sender como vendedor. O msg.sender é uma variável global no Solidity que representa o endereço da pessoa (ou contrato inteligente) que é chamada de função atual. No entanto, o item não está listado para venda imediatamente.

  3. Uma função listItemForSale que permite ao vendedor de um item listá-lo para venda. Usamos a função require para garantir que apenas o vendedor possa listar o item à venda.

  4. Uma função buyItem que permite que alguém compre um item. A função verifica se o item está à venda, se o comprador não é o vendedor e se o preço correto foi enviado. Se essas condições forem atendidas, a função envia o dinheiro ao vendedor e marca o item como não à venda.

Implantando e interagindo com o contrato do Marketplace

Depois de redigir o contrato Marketplace , a próxima etapa é compilá-lo e implantá-lo. Você pode usar o plugin Solidity Compiler no Remix para compilar o contrato, assim como fizemos na Lição 1.

Para implantar o contrato, acesse o plugin Deploy & Run Transactions (aquele com o ícone do cubo) no painel direito. Escolha o ambiente apropriado (JavaScript VM para simulação), selecione o contrato do Marketplace no menu suspenso Contrato e clique no botão Implantar.

Assim que o contrato for implantado, ele aparecerá na seção Contratos Implantados. Você pode expandi-lo para ver suas variáveis e funções de estado público. Você pode criar, listar e comprar itens chamando essas funções.

Para criar um item, insira um nome e um preço e clique no botão createItem . Para listar um item à venda, insira o ID do item e clique no botão listItemForSale . Para comprar um item, insira o ID do item, envie a quantidade correta de Ether e clique no botão buyItem .

Parabéns! Agora você sabe como criar um mercado descentralizado básico na blockchain Ethereum.

Na próxima lição, melhoraremos nosso mercado adicionando funcionalidades para remover itens da venda e atualizar o preço de um item. Fique atento!

Tuyên bố từ chối trách nhiệm
* Đầu tư tiền điện tử liên quan đến rủi ro đáng kể. Hãy tiến hành một cách thận trọng. Khóa học không nhằm mục đích tư vấn đầu tư.
* Khóa học được tạo bởi tác giả đã tham gia Gate Learn. Mọi ý kiến chia sẻ của tác giả không đại diện cho Gate Learn.