Exercício – Escrever seu primeiro contrato
Agora, vamos reunir o que aprendemos em um contrato inteligente completo.
Neste exemplo, você usará o Solidity para criar um contrato inteligente para um marketplace online simples. Este contrato permitirá aos usuários listar um item para venda e comprar um item disponível. Há duas funções envolvidas: um vendedor e um comprador.
Exemplo de marketplace simples
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);
}
}
Vamos nos aprofundar nos principais componentes deste contrato inteligente:
- Existem:
- Três variáveis de estado:
buyer
,seller
ebalances
- Dois eventos:
ListItem
ePurchasedItem
- Uma enumeração com dois valores:
ItemAvailable
eItemPurchased
- Três variáveis de estado:
- O construtor designa o usuário do vendedor como
msg.sender
e define o estado inicial comoItemAvailable
. Esse construtor é chamado quando o contrato é criado. - A função
buy
usa três parâmetros:seller
,buyer
eprice
. Ela exige que o comprador tenha dinheiro suficiente para a compra. Em seguida, transfere o dinheiro do comprador para o vendedor e, por fim, uma mensagem é emitida.
Próximas etapas
Acesse Remix IDE para explorar mais exemplos de contratos inteligentes no Solidity. O remix é um IDE no navegador que permite que você comece imediatamente sem precisar criar uma conta nem entrar. Você pode gravar, testar, compilar e implantar contratos imediatamente.
Copie e cole este contrato inteligente no Remix em um novo arquivo chamado Marketplace.sol
. Em seguida, compile e implante o contrato. Embora o contrato tenha uma função para comprar um item disponível, você observará que não é possível fornecer uma moeda do comprador para fazer a compra. Como desafio extra, use o que você aprendeu para escrever uma função para dar um saldo ao comprador, fornecendo um endereço de conta e um valor. Se quiser ver um exemplo de como fazer isso, assista ao Dr. G adicionar uma função para inicializar um saldo para os participantes.