github.com/codingfuture/orig-energi3@v0.8.4/energi/contracts/src/BudgetProposalV1.sol (about) 1 // Copyright 2019 The Energi Core Authors 2 // This file is part of Energi Core. 3 // 4 // Energi Core is free software: you can redistribute it and/or modify 5 // it under the terms of the GNU General Public License as published by 6 // the Free Software Foundation, either version 3 of the License, or 7 // (at your option) any later version. 8 // 9 // Energi Core is distributed in the hope that it will be useful, 10 // but WITHOUT ANY WARRANTY; without even the implied warranty of 11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 // GNU General Public License for more details. 13 // 14 // You should have received a copy of the GNU General Public License 15 // along with Energi Core. If not, see <http://www.gnu.org/licenses/>. 16 17 // Energi Governance system is the fundamental part of Energi Core. 18 19 // NOTE: It's not allowed to change the compiler due to byte-to-byte 20 // match requirement. 21 pragma solidity 0.5.16; 22 //pragma experimental SMTChecker; 23 24 import { IGovernedProxy } from "./IGovernedProxy.sol"; 25 import { IBudgetProposal } from "./ITreasury.sol"; 26 import { GenericProposalV1 } from "./GenericProposalV1.sol"; 27 28 /** 29 * Budget Proposal V1 for Treasury distribution 30 */ 31 contract BudgetProposalV1 is 32 GenericProposalV1, 33 IBudgetProposal 34 { 35 uint public paid_amount; 36 uint public proposed_amount; 37 uint public ref_uuid; 38 39 constructor( 40 IGovernedProxy _mnregistry_proxy, 41 address payable _payout_address, 42 uint _ref_uuid, 43 uint _proposed_amount, 44 uint _period 45 ) 46 public 47 GenericProposalV1( 48 _mnregistry_proxy, 49 7, 50 _period, 51 _payout_address 52 ) 53 { 54 ref_uuid = _ref_uuid; 55 proposed_amount = _proposed_amount; 56 } 57 58 // IBudgetProposal 59 //--------------------------------- 60 61 // Just an alias 62 function payout_address() 63 external view 64 returns(address payable) 65 { 66 return fee_payer; 67 } 68 69 // Called by Treasury on reward() 70 function distributePayout() external payable { 71 paid_amount += msg.value; 72 assert(paid_amount <= proposed_amount); 73 } 74 75 // Optimized status retrieval in single call 76 function budgetStatus() 77 external view 78 returns( 79 uint uuid, 80 bool is_accepted, 81 bool is_finished, 82 uint unpaid 83 ) 84 { 85 uuid = ref_uuid; 86 is_accepted = isAccepted(); 87 is_finished = isFinished(); 88 assert(paid_amount <= proposed_amount); 89 unpaid = proposed_amount - paid_amount; 90 } 91 } 92