Clean the contract

This commit is contained in:
Richard Ramos 2018-07-01 22:30:16 -04:00
parent b4aa122e44
commit 10c0269a4d
2 changed files with 17 additions and 10 deletions

View File

@ -1,9 +1,12 @@
pragma solidity 0.4.24;
import "./SpaceshipToken.sol";
import "zeppelin-solidity/contracts/token/ERC721/ERC721Receiver.sol";
contract SpaceshipMarketplace {
contract SpaceshipMarketplace is ERC721Receiver {
// Esta estructura guarda informacion sobre las ventas
struct Sale {
uint spaceshipId;
uint price;
@ -13,32 +16,37 @@ contract SpaceshipMarketplace {
SpaceshipToken token;
Sale[] public sales;
mapping(uint => uint) spaceshipToSale;
event NewSale(uint indexed spaceshipId, uint price, uint saleId);
event ShipSold(uint indexed spaceshipId, uint price, address indexed oldOwner, address indexed newOwner);
constructor(SpaceshipToken _token) public{
token = _token;
}
function buy(uint _saleId) payable {
require(sales[_saleId].owner == msg.sender);
require(msg.value >= sales[_saleId].price);
Sale storage s = sales[_saleId];
uint price = sales[_saleId].price;
require(s.owner == msg.sender);
require(msg.value >= s.price);
uint refund = msg.value - price;
uint refund = msg.value - s.price;
if(refund > 0)
msg.sender.transfer(refund);
// Transferimos el ether de la venta
sales[_saleId].owner.transfer(price);
s.owner.transfer(s.price);
emit ShipSold(s.spaceshipId, s.price, s.owner, msg.sender);
// Transferimos el token
token.safeTransferFrom(address(this), msg.sender, sales[_saleId].spaceshipId);
token.safeTransferFrom(address(this), msg.sender, s.spaceshipId);
// Eliminamos la venta
delete spaceshipToSale[sales[_saleId].spaceshipId];
delete spaceshipToSale[s.spaceshipId];
delete sales[_saleId];
}
@ -46,6 +54,7 @@ contract SpaceshipMarketplace {
// Solo se pueden vender tus propias naves
require(token.ownerOf(_spaceshipId) == msg.sender);
// Transferimos el token a este contrato escrow
token.safeTransferFrom(msg.sender, address(this), _spaceshipId);
Sale memory s = Sale({

View File

@ -21,8 +21,6 @@ contract SpaceshipToken is ERC721Token("CryptoSpaceships", "CST"), Ownable {
// Todas las naves que se han creado.
Spaceship[] public spaceships;
event LevelUp(uint spaceshipId, uint level);
// Precio de las naves
mapping(uint => uint) public spaceshipPrices;
uint[] public shipsForSale;