Skip to content

Instantly share code, notes, and snippets.

@jmlon
Created November 23, 2020 19:54
Show Gist options
  • Save jmlon/ca6fdec73b1a6d231f7adcd037520429 to your computer and use it in GitHub Desktop.
Save jmlon/ca6fdec73b1a6d231f7adcd037520429 to your computer and use it in GitHub Desktop.
contract Energia2 {
address public consumidor;
address payable public generador;
address public contador;
address payable public distribuidora;
uint public energiaSolicitada;
uint public valorAPagar;
event ContratoEstablecido(address consumidor, address productor);
event ContratoLiquidado(address productor, address distribuidora, uint pagoProductor, uint pagoDistribuidora);
function crearOrden(uint cantidad) payable external {
consumidor = msg.sender;
valorAPagar = msg.value;
energiaSolicitada = cantidad;
}
// TODO: Solo generadores
function aceptarOrden() external {
generador = msg.sender;
emit ContratoEstablecido(consumidor, generador);
}
modifier soloContadorInteligente() {
require(msg.sender == contador, "Esta funcion solo la puede hacer el contador");
_;
}
function verificarSuministro(uint medicion) external soloContadorInteligente {
uint valorGenerador = 0;
uint valorDistribuidor = 0;
if (medicion>=energiaSolicitada) {
valorGenerador = valorAPagar*90/100;
valorDistribuidor = valorAPagar*10/100;
}
else {
valorGenerador = valorAPagar*medicion*90/energiaSolicitada/100;
valorDistribuidor = valorAPagar*medicion*10/energiaSolicitada/100;
}
generador.transfer(valorGenerador);
distribuidora.transfer(valorDistribuidor);
ContratoLiquidado(generador, distribuidora, valorGenerador, valorDistribuidor);
}
constructor(address payable d, address v) {
distribuidora = d;
contador = v;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment