Agora vamos transformar o nosso simples contrato de item
num contrato de Marketplace
mais complexo. O contrato Marketplace
manterá uma lista de itens para venda, fornece uma maneira de os usuários listarem novos itens para venda e fornece uma maneira de os usuários comprarem itens.
Para isso, adicionaremos algumas funcionalidades novas ao nosso contrato:
Cada item terá agora um endereço para o vendedor
, que representa o proprietário do artigo.
Vamos introduzir uma nova função ListitemForMoe que permite aos utilizadores listar novos itens para venda
.
Vamos introduzir uma nova função buyItem que permite aos utilizadores comprarem um item
.
Marketplace
:Solidez
//SPDX-Identificador da licença: MIT
solidez pragma ^0.8.6;
contrato Marketplace {
//Definir uma nova estrutura para os Itens
struct Item {
string name;
uint price;
address payable seller;
bool forSale;
}
//Matriz para segurar todos os itens
O item [] itens públicos;
//Evento que será emitido quando um novo item for criado
evento NeWitem (uint iTeMid, item de string Name, uint IteMrice, vendedor de endereço);
//Evento que será emitido quando um artigo é listado para venda
item do eventoListado (uint iTeMid, item da string Name, uint itemPrice, vendedor de endereço);
//Evento que será emitido quando um artigo é comprado
evento itemBWate (uint iTeMid, string itemName, uint itemPrice, vendedor de endereço, comprador de endereço);
//Função para criar um novo item mas não listá-lo para venda imediatamente
função criateItem (memória da cadeia de caracteres _name, uint _price) público {
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 à venda
função ListitemForsale (uint _Itemid) pública {
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
função BuyItem (uint _ItemID) público a pagar {
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);
}
}
Uma peça do item
que agora inclui um endereço para vendedor
e um booleano parSale
. O vendedor
é o proprietário do artigo e paraVenda
indica se o item está listado atualmente para venda.
Uma função CreateItem
que cria um novo item e atribui o msg.sender como o vendedor
. A msg.sender
é uma variável global em Solidez que representa o endereço da pessoa (ou contrato inteligente) que é chamada a função atual. No entanto, o artigo não está listado para venda imediatamente.
Uma função ListitemForVenda
que permite ao vendedor de um item listar para venda. Usamos a função require
para ter certeza de que apenas o vendedor pode listar o item à venda.
Uma função BuyItem
que permite que alguém compre um item. A função verifica se o artigo está à venda, o comprador não é o vendedor e o preço correto foi enviado. Se essas condições forem atendidas, a função envia o dinheiro para o vendedor e marca o item como não à venda.
Depois de escrever o contrato Marketplace
, o próximo passo é compilá-lo e implementá-lo. Pode usar o 'plugin' Soliity Compiler no Remix para compilar o contrato, tal como fizemos na Lição 1.
Para implementar o contrato, vá para o plugin Deploy & Run Transactions (o que tem o ícone do cubo) no painel direito. Escolha o ambiente apropriado (JavaScript VM para simulação), selecione o contrato Marketplace
no menu suspenso Contrato e clique no botão Implementar.
Assim que o contrato for implementado, aparecerá na seção Contratos Implementados. Pode expandi-lo para ver as suas variáveis e funções do estado público. Pode criar, listar e comprar itens ligando para essas funções.
Para criar um item, digite um nome e um preço e clique no botão CreateItem
. Para listar um item à venda, insira a identificação do item e clique no botão ListitemForVenda
. Para comprar um item, insira a identificação do item, envie a quantidade correta de Éter e clique no botão Comprar-Item
.
Parabéns! Sabe agora como criar um mercado básico descentralizado na cadeia de blocos Ethereum.
Na próxima lição, vamos melhorar o nosso mercado adicionando funcionalidade para remover itens de venda e atualizar o preço de um item. Fique atento!
Agora vamos transformar o nosso simples contrato de item
num contrato de Marketplace
mais complexo. O contrato Marketplace
manterá uma lista de itens para venda, fornece uma maneira de os usuários listarem novos itens para venda e fornece uma maneira de os usuários comprarem itens.
Para isso, adicionaremos algumas funcionalidades novas ao nosso contrato:
Cada item terá agora um endereço para o vendedor
, que representa o proprietário do artigo.
Vamos introduzir uma nova função ListitemForMoe que permite aos utilizadores listar novos itens para venda
.
Vamos introduzir uma nova função buyItem que permite aos utilizadores comprarem um item
.
Marketplace
:Solidez
//SPDX-Identificador da licença: MIT
solidez pragma ^0.8.6;
contrato Marketplace {
//Definir uma nova estrutura para os Itens
struct Item {
string name;
uint price;
address payable seller;
bool forSale;
}
//Matriz para segurar todos os itens
O item [] itens públicos;
//Evento que será emitido quando um novo item for criado
evento NeWitem (uint iTeMid, item de string Name, uint IteMrice, vendedor de endereço);
//Evento que será emitido quando um artigo é listado para venda
item do eventoListado (uint iTeMid, item da string Name, uint itemPrice, vendedor de endereço);
//Evento que será emitido quando um artigo é comprado
evento itemBWate (uint iTeMid, string itemName, uint itemPrice, vendedor de endereço, comprador de endereço);
//Função para criar um novo item mas não listá-lo para venda imediatamente
função criateItem (memória da cadeia de caracteres _name, uint _price) público {
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 à venda
função ListitemForsale (uint _Itemid) pública {
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
função BuyItem (uint _ItemID) público a pagar {
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);
}
}
Uma peça do item
que agora inclui um endereço para vendedor
e um booleano parSale
. O vendedor
é o proprietário do artigo e paraVenda
indica se o item está listado atualmente para venda.
Uma função CreateItem
que cria um novo item e atribui o msg.sender como o vendedor
. A msg.sender
é uma variável global em Solidez que representa o endereço da pessoa (ou contrato inteligente) que é chamada a função atual. No entanto, o artigo não está listado para venda imediatamente.
Uma função ListitemForVenda
que permite ao vendedor de um item listar para venda. Usamos a função require
para ter certeza de que apenas o vendedor pode listar o item à venda.
Uma função BuyItem
que permite que alguém compre um item. A função verifica se o artigo está à venda, o comprador não é o vendedor e o preço correto foi enviado. Se essas condições forem atendidas, a função envia o dinheiro para o vendedor e marca o item como não à venda.
Depois de escrever o contrato Marketplace
, o próximo passo é compilá-lo e implementá-lo. Pode usar o 'plugin' Soliity Compiler no Remix para compilar o contrato, tal como fizemos na Lição 1.
Para implementar o contrato, vá para o plugin Deploy & Run Transactions (o que tem o ícone do cubo) no painel direito. Escolha o ambiente apropriado (JavaScript VM para simulação), selecione o contrato Marketplace
no menu suspenso Contrato e clique no botão Implementar.
Assim que o contrato for implementado, aparecerá na seção Contratos Implementados. Pode expandi-lo para ver as suas variáveis e funções do estado público. Pode criar, listar e comprar itens ligando para essas funções.
Para criar um item, digite um nome e um preço e clique no botão CreateItem
. Para listar um item à venda, insira a identificação do item e clique no botão ListitemForVenda
. Para comprar um item, insira a identificação do item, envie a quantidade correta de Éter e clique no botão Comprar-Item
.
Parabéns! Sabe agora como criar um mercado básico descentralizado na cadeia de blocos Ethereum.
Na próxima lição, vamos melhorar o nosso mercado adicionando funcionalidade para remover itens de venda e atualizar o preço de um item. Fique atento!