Skip to content

Instantly share code, notes, and snippets.

@rpaskin
Last active October 29, 2021 12:54
Show Gist options
  • Save rpaskin/6a7d01ab1d3de69e9db5f09f655023c8 to your computer and use it in GitHub Desktop.
Save rpaskin/6a7d01ab1d3de69e9db5f09f655023c8 to your computer and use it in GitHub Desktop.
Exercicio de criar um contrato de venda de pizza em solidity
// SPDX-License-Identifier: GPL-3.0
pragma solidity >=0.7.0 <0.9.0;
contract Pizzaria {
uint public precoDaPizza = 1 ether;
address payable public comprador;
address payable public donoDaPizzaria;
constructor() {
donoDaPizzaria = payable(msg.sender);
}
function comprar() payable public {
// pagar
// dinheiro enviado deve ser igual ao preço
require (msg.value == precoDaPizza, "Nao enviado o preco certo, operacao cancelada");
require (comprador == address(0x0), "Contrato ja utilizado");
// if (msg.value > precoDaPizza){
// // dar o troco
// uint troco = msg.value - precoDaPizza;
// // transferir de volta
// msg.sender.transfer(troco);
// }
// guardar o endereco do comprador
comprador = payable(msg.sender);
}
function resgatar() public {
// apenas o donoDaPizzaria
require(msg.sender == donoDaPizzaria);
// transferir saldo do contrato para o donoDaPizzaria
donoDaPizzaria.transfer(address(this).balance);
}
}
title Pizza
actor dono
entity contratoDePizza
actor comprador
dono->contratoDePizza:deploy de um contrato de compra de pizza
contratoDePizza->dono:informa o endereço do contrato
dono->contratoDePizza:ativar o contrato
comprador->dono:pedir informações
dono->comprador:informa número do contrato, preço, etc.
alt se o contrato está ativo
comprador<->contratoDePizza:confirmar preço da pizza (opcional)
comprador->contratoDePizza:enviar ETH suficiente para a compra
contratoDePizza->contratoDePizza:guardar dados do comprador
dono<->contratoDePizza:pegar informações do comprador
dono<->contratoDePizza:resgatar saldo
end
comprador->contratoDePizza:avaliar serviço
dono->contratoDePizza:desativar o contrato
# use o site https://sequencediagram.org/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment