Skip to content

Instantly share code, notes, and snippets.

@ernestognw
Created November 12, 2019 16:43
Show Gist options
  • Save ernestognw/e392673b7640a662e68a8054717a9a2f to your computer and use it in GitHub Desktop.
Save ernestognw/e392673b7640a662e68a8054717a9a2f to your computer and use it in GitHub Desktop.
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