第2課

Listado y comercio de artículos

En esta lección, ampliaremos nuestro contrato de artículos para manejar el listado y el comercio de artículos en nuestro mercado. Aprenderemos cómo agregar, enumerar y eliminar artículos, así como los conceptos básicos de compra y venta de artículos. También aprenderemos cómo implementar nuestro contrato e interactuar con él en Remix IDE.

Construyendo el contrato de mercado

Ahora transformaremos nuestro contrato Item simple en un contrato Marketplace más complejo. El contrato Marketplace mantendrá una lista de artículos a la venta, proporcionará una manera para que los usuarios enumeren nuevos artículos a la venta y brindará una manera para que los usuarios compren artículos.

Para ello, agregaremos algunas características nuevas a nuestro contrato:

  1. Cada artículo ahora tendrá una dirección seller , que representa al propietario del artículo.

  2. Introduciremos una nueva función listItemForSale que permite a los usuarios enumerar nuevos artículos para la venta.

  3. Introduciremos una nueva función buyItem que permitirá a los usuarios comprar un artículo.

Así es como se ve el contrato Marketplace :

Solidez 
 // Identificador de licencia SPDX: solidez pragma del MIT 
 ^0.8.6; 

 contract Marketplace { 
 // Definir una nueva estructura para los artículos 
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Matriz para contener todos los artículos 
 Item[] public items; 

 // Evento que se emitirá cuando se cree un nuevo artículo 
 evento NewItem(uint itemId, string itemName, uint itemPrice, dirección del vendedor); 

 // Evento que se emitirá cuando un artículo se ponga a la venta 
 evento ItemListed(uint itemId, string itemName, uint itemPrice, dirección del vendedor); 

 // Evento que se emitirá cuando se compre un artículo 
 event ItemBought(uint itemId, string itemName, uint itemPrice, dirección del vendedor, dirección del comprador); 

 // Función para crear un nuevo artículo pero no ponerlo a la venta inmediatamente 
 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);
    }


    // Función para poner un artículo a la venta 
 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);
    }

    // Función para comprar un artículo 
 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);
    }
}

En este contrato tenemos:

  1. Una estructura Item que ahora incluye una dirección seller y un booleano forSale . El seller es el propietario del artículo y forSale indica si el artículo está actualmente a la venta.

  2. Una función createItem que crea un nuevo artículo y asigna msg.sender como vendedor. msg.sender es una variable global en Solidity que representa la dirección de la persona (o contrato inteligente) que se llama función actual. Sin embargo, el artículo no aparece a la venta de inmediato.

  3. Una función listItemForSale que permite al vendedor de un artículo ponerlo a la venta. Usamos la función require para asegurarnos de que solo el vendedor pueda poner el artículo a la venta.

  4. Una función buyItem que permite a alguien comprar un artículo. La función verifica que el artículo esté a la venta, que el comprador no sea el vendedor y que se haya enviado el precio correcto. Si se cumplen estas condiciones, la función envía el dinero al vendedor y marca el artículo como no a la venta.

Implementación e interacción con el contrato del mercado

Después de redactar el contrato Marketplace , el siguiente paso es compilarlo e implementarlo. Puede usar el complemento Solidity Compiler en Remix para compilar el contrato, tal como lo hicimos en la Lección 1.

Para implementar el contrato, vaya al complemento Implementar y ejecutar transacciones (el que tiene el ícono del cubo) en el panel derecho. Elija el entorno adecuado (JavaScript VM para simulación), seleccione el contrato Marketplace en el menú desplegable Contrato y haga clic en el botón Implementar.

Una vez implementado el contrato, aparecerá en la sección Contratos implementados. Puede expandirlo para ver sus variables y funciones de estado público. Puede crear, enumerar y comprar artículos llamando a estas funciones.

Para crear un artículo, ingrese un nombre y un precio, y haga clic en el botón createItem . Para poner un artículo a la venta, ingrese el ID del artículo y haga clic en el botón listItemForSale . Para comprar un artículo, ingrese el ID del artículo, envíe la cantidad correcta de Ether y haga clic en el botón buyItem .

¡Felicidades! Ahora sabes cómo crear un mercado descentralizado básico en la cadena de bloques Ethereum.

En la próxima lección, mejoraremos nuestro mercado agregando funciones para eliminar artículos de la venta y actualizar el precio de un artículo. ¡Manténganse al tanto!

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
目錄
第2課

Listado y comercio de artículos

En esta lección, ampliaremos nuestro contrato de artículos para manejar el listado y el comercio de artículos en nuestro mercado. Aprenderemos cómo agregar, enumerar y eliminar artículos, así como los conceptos básicos de compra y venta de artículos. También aprenderemos cómo implementar nuestro contrato e interactuar con él en Remix IDE.

Construyendo el contrato de mercado

Ahora transformaremos nuestro contrato Item simple en un contrato Marketplace más complejo. El contrato Marketplace mantendrá una lista de artículos a la venta, proporcionará una manera para que los usuarios enumeren nuevos artículos a la venta y brindará una manera para que los usuarios compren artículos.

Para ello, agregaremos algunas características nuevas a nuestro contrato:

  1. Cada artículo ahora tendrá una dirección seller , que representa al propietario del artículo.

  2. Introduciremos una nueva función listItemForSale que permite a los usuarios enumerar nuevos artículos para la venta.

  3. Introduciremos una nueva función buyItem que permitirá a los usuarios comprar un artículo.

Así es como se ve el contrato Marketplace :

Solidez 
 // Identificador de licencia SPDX: solidez pragma del MIT 
 ^0.8.6; 

 contract Marketplace { 
 // Definir una nueva estructura para los artículos 
 struct Item {
        string name;
        uint price;
        address payable seller;
        bool forSale;
    }

    // Matriz para contener todos los artículos 
 Item[] public items; 

 // Evento que se emitirá cuando se cree un nuevo artículo 
 evento NewItem(uint itemId, string itemName, uint itemPrice, dirección del vendedor); 

 // Evento que se emitirá cuando un artículo se ponga a la venta 
 evento ItemListed(uint itemId, string itemName, uint itemPrice, dirección del vendedor); 

 // Evento que se emitirá cuando se compre un artículo 
 event ItemBought(uint itemId, string itemName, uint itemPrice, dirección del vendedor, dirección del comprador); 

 // Función para crear un nuevo artículo pero no ponerlo a la venta inmediatamente 
 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);
    }


    // Función para poner un artículo a la venta 
 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);
    }

    // Función para comprar un artículo 
 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);
    }
}

En este contrato tenemos:

  1. Una estructura Item que ahora incluye una dirección seller y un booleano forSale . El seller es el propietario del artículo y forSale indica si el artículo está actualmente a la venta.

  2. Una función createItem que crea un nuevo artículo y asigna msg.sender como vendedor. msg.sender es una variable global en Solidity que representa la dirección de la persona (o contrato inteligente) que se llama función actual. Sin embargo, el artículo no aparece a la venta de inmediato.

  3. Una función listItemForSale que permite al vendedor de un artículo ponerlo a la venta. Usamos la función require para asegurarnos de que solo el vendedor pueda poner el artículo a la venta.

  4. Una función buyItem que permite a alguien comprar un artículo. La función verifica que el artículo esté a la venta, que el comprador no sea el vendedor y que se haya enviado el precio correcto. Si se cumplen estas condiciones, la función envía el dinero al vendedor y marca el artículo como no a la venta.

Implementación e interacción con el contrato del mercado

Después de redactar el contrato Marketplace , el siguiente paso es compilarlo e implementarlo. Puede usar el complemento Solidity Compiler en Remix para compilar el contrato, tal como lo hicimos en la Lección 1.

Para implementar el contrato, vaya al complemento Implementar y ejecutar transacciones (el que tiene el ícono del cubo) en el panel derecho. Elija el entorno adecuado (JavaScript VM para simulación), seleccione el contrato Marketplace en el menú desplegable Contrato y haga clic en el botón Implementar.

Una vez implementado el contrato, aparecerá en la sección Contratos implementados. Puede expandirlo para ver sus variables y funciones de estado público. Puede crear, enumerar y comprar artículos llamando a estas funciones.

Para crear un artículo, ingrese un nombre y un precio, y haga clic en el botón createItem . Para poner un artículo a la venta, ingrese el ID del artículo y haga clic en el botón listItemForSale . Para comprar un artículo, ingrese el ID del artículo, envíe la cantidad correcta de Ether y haga clic en el botón buyItem .

¡Felicidades! Ahora sabes cómo crear un mercado descentralizado básico en la cadena de bloques Ethereum.

En la próxima lección, mejoraremos nuestro mercado agregando funciones para eliminar artículos de la venta y actualizar el precio de un artículo. ¡Manténganse al tanto!

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。