Created
November 12, 2019 16:43
-
-
Save ernestognw/e392673b7640a662e68a8054717a9a2f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity 0.5.11; | |
contract Aseguradora { | |
// Variables | |
address public aseguradora; | |
address public gobierno; | |
uint256 public multiplicador; | |
struct Seguro { | |
uint cantidad; | |
bool pagado; | |
bool defuncion; | |
bool aprobado; | |
address beneficiario; | |
} | |
mapping(address => Seguro) public asegurados; | |
// Modificadores | |
modifier soloGobierno(){ | |
require(msg.sender == gobierno); | |
_; | |
} | |
modifier soloAseguradora(){ | |
require(msg.sender == aseguradora); | |
_; | |
} | |
// constructor | |
constructor(address _gobierno, uint256 _multiplicador) public { | |
aseguradora = msg.sender; | |
gobierno = _gobierno; | |
multiplicador = _multiplicador; | |
} | |
// Métodos | |
// Comprar | |
function comprarSeguro(address _asegurado, address _beneficiario) public payable { | |
require(msg.value != 0, "Manda algo de ether"); | |
asegurados[_asegurado].cantidad = msg .value * multiplicador; | |
asegurados[_asegurado].beneficiario = _beneficiario; | |
} | |
function certificarDefuncion(address _fallecido) public soloGobierno() { | |
require(!asegurados[_fallecido].defuncion, "Este individuo ya falleció"); | |
asegurados[_fallecido].defuncion = true; | |
} | |
function aprobarPago(address _asegurado) public soloAseguradora(){ | |
require(asegurados[_asegurado].defuncion == true, "Este asegurado no cumple con los requisitos"); | |
require(!asegurados[_asegurado].aprobado, "Esta poliza ya se hab´ía aprobado"); | |
asegurados[_asegurado].aprobado = true; | |
} | |
function cobrarSeguro(address _asegurado) public { | |
require(asegurados[_asegurado].beneficiario == msg.sender, "Tu no eres el beneficiario"); | |
require(asegurados[_asegurado].aprobado, "No esta aprobado"); | |
require(!asegurados[_asegurado].pagado, "Esto ya se pago"); | |
require(address(this).balance >= asegurados[_asegurado].cantidad, "No tengo plata, vuekve mas tarde"); | |
asegurados[_asegurado].pagado = true; | |
msg.sender.transfer(asegurados[_asegurado].cantidad); | |
} | |
function() external payable {} | |
// Getters | |
function getBalance() view public returns(uint256){ | |
return address(this).balance; | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment