Skip to content

Instantly share code, notes, and snippets.

@falehenrique
Created April 6, 2018 01:28
Show Gist options
  • Select an option

  • Save falehenrique/bf6d0007106df4b02bdf53c107ae255f to your computer and use it in GitHub Desktop.

Select an option

Save falehenrique/bf6d0007106df4b02bdf53c107ae255f to your computer and use it in GitHub Desktop.
Contrato de doações
pragma solidity ^0.4.18;
//
contract Doacao {
address public dono;
enum StatusDoacao{ABERTO, FECHADO, SACADO}
StatusDoacao statusDoacao;
address public ong;
Doador[] public doadores;
event LogDoacaoRecebida(address doador, uint256 value);
event LogSaqueEfetuado(uint dataHora);
struct Doador {
address doador;
uint256 valor;
uint256 dataHora;
}
function Doacao(address _ong) public {
dono = msg.sender;
statusDoacao = StatusDoacao.ABERTO;
ong = _ong;
}
modifier apenasDono() {
require(msg.sender == dono);
_;
}
modifier validarDoacao() {
require(msg.value > 0 && statusDoacao == StatusDoacao.ABERTO);
_;
}
modifier apenasDoacaoSacado() {
require(statusDoacao == StatusDoacao.SACADO);
_;
}
function informarOng(address _ong) public apenasDono apenasDoacaoSacado {
ong = _ong;
}
function fecharDoacoes() public apenasDono {
require(statusDoacao == StatusDoacao.ABERTO);
statusDoacao = StatusDoacao.FECHADO;
}
function abrirDoacoes() public apenasDono apenasDoacaoSacado {
statusDoacao = StatusDoacao.ABERTO;
}
function sacarDoacoes() public {
require(msg.sender == ong && address(this).balance > 0 && statusDoacao == StatusDoacao.FECHADO);
statusDoacao = StatusDoacao.SACADO;
emit LogSaqueEfetuado(now);
msg.sender.transfer(address(this).balance);
}
function receberDoacao() public payable validarDoacao {
Doador memory doador = Doador(msg.sender, msg.value, now);
doadores.push(doador);
emit LogDoacaoRecebida(msg.sender, msg.value);
address(this).transfer(msg.value);
}
// função callback
function() public payable validarDoacao {
}
function consultarStatus() public view returns(string){
if(statusDoacao == StatusDoacao.ABERTO) {
return "ABERTO";
} else if (statusDoacao == StatusDoacao.FECHADO) {
return "FECHADO";
}
return "SACADO";
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment