Ejercicio: Escribir el primer contrato
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
ybalances
- Dos eventos:
ListItem
yPurchasedItem
- Una enumeración con dos valores:
ItemAvailable
yItemPurchased
- Tres variables de estado:
- El constructor asigna el usuario vendedor como
msg.sender
y establece el estado inicial enItemAvailable
. Cuando el contrato se crea, se llama a este constructor. - La función
buy
toma tres parámetros:seller
,buyer
yprice
. 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).