Ejercicio: Escribir el primer contrato

Completado

Ahora, vamos a poner en práctica todo lo que hemos aprendido sobre Solidity para crear un contrato inteligente completo.

En este ejemplo, usaremos Solidity para crear un contrato inteligente para un catálogo en línea sencillo. Este contrato permitirá a los usuarios incluir un artículo en el catálogo para su venta, así como comprar un artículo disponible. Participan, pues, dos roles: vendedor y comprador.

Ejemplo de marketplace sencillo

pragma solidity >0.7.0 <0.8.0;

contract Marketplace {
    address public seller;
    address public buyer;
    mapping (address => uint) public balances;

    event ListItem(address seller, uint price);
    event PurchasedItem(address seller, address buyer, uint price);

    enum StateType {
          ItemAvailable,
          ItemPurchased
    }

    StateType public State;

    constructor() public {
        seller = msg.sender;
        State = StateType.ItemAvailable;
    }

    function buy(address seller, address buyer, uint price) public payable {
        require(price <= balances[buyer], "Insufficient balance");
        State = StateType.ItemPurchased;
        balances[buyer] -= price;
        balances[seller] += price;

        emit PurchasedItem(seller, buyer, msg.value);
    }
}    

Veamos más detalladamente los principales componentes de este contrato inteligente:

  • Estas son:
    • Tres variables de estado: buyer, seller y balances
    • Dos eventos: ListItem y PurchasedItem
    • Una enumeración con dos valores: ItemAvailable y ItemPurchased
  • El constructor asigna el usuario vendedor como msg.sender y establece el estado inicial en ItemAvailable. Cuando el contrato se crea, se llama a este constructor.
  • La función buy toma tres parámetros: seller, buyer y price. Tiene el requisito de que el comprador debe tener dinero suficiente para la compra. Tras ello, el dinero del comprador se transfiere al vendedor y, por último, se emite un mensaje.

Pasos siguientes

Vaya al IDE Remix para explorar más ejemplos de contrato inteligente en Solidity. Remix es un IDE de explorador que permite empezar inmediatamente, sin tener que crear una cuenta o iniciar sesión. Esto es, podemos escribir, probar, compilar e implementar contratos de manera instantánea.

Copie y pegue este contrato inteligente en Remix, en un nuevo archivo denominado Marketplace.sol. A continuación, compile e implemente el contrato. Mientras que el contrato tiene una función para comprar un artículo disponible, notará que no hay manera de dar una moneda del comprador para hacer la compra. Si quiere un desafío mayor, use lo que ha aprendido para escribir una función que permita otorgar fondos al comprador, proporcionando la dirección de una cuenta y un importe. Para ver un ejemplo de cómo hacerlo, vea Dr. G add a function to initialize a balance for participants (Dr. G: agregar una función para otorgar saldo a los participantes).