Created
April 6, 2018 01:28
-
-
Save falehenrique/bf6d0007106df4b02bdf53c107ae255f to your computer and use it in GitHub Desktop.
Contrato de doações
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.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