Guest User

Untitled

a guest
Jul 16th, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. pragma solidity ^0.4.22;
  2.  
  3. contract CampaignManager {
  4.  
  5. address[] public deployedContracts;
  6.  
  7. function newCampaign (uint _minimumContribution) public {
  8. address new_campaign = new Campaign(msg.sender, _minimumContribution);
  9. deployedContracts.push(new_campaign);
  10. }
  11.  
  12. function getDeployedContracts() public view returns (address[]) {
  13. return deployedContracts;
  14. }
  15.  
  16. }
  17.  
  18. contract Campaign {
  19.  
  20. struct Request {
  21. string description;
  22. uint amount; // wei
  23. address recipient;
  24. bool complete;
  25. mapping (address => bool) approvals;
  26. uint approvalCount;
  27. }
  28.  
  29. address public manager;
  30. uint public minimumContribution; // wei
  31.  
  32. mapping (address => bool) public approvers;
  33. Request[] public requests;
  34. uint public approversCount = 0;
  35.  
  36. constructor (address owner, uint minContrib) public {
  37. manager = owner;
  38. minimumContribution = minContrib;
  39.  
  40. }
  41.  
  42. function contribute() public payable {
  43. require(msg.value >= minimumContribution);
  44. require(!approvers[msg.sender]);
  45.  
  46. approvers[msg.sender] = true;
  47. approversCount ++;
  48. }
  49.  
  50. modifier onlyBy(address _account)
  51. {
  52. require(
  53. msg.sender == _account,
  54. "Sender not authorized."
  55. );
  56. _;
  57. }
  58.  
  59. function createRequest(string _description, uint _amount, address _recipient)
  60. public onlyBy(manager) {
  61. Request memory request = Request({
  62. description: _description,
  63. amount: _amount,
  64. recipient: _recipient,
  65. complete: false,
  66. approvalCount: 0
  67. });
  68.  
  69. requests.push(request);
  70. }
  71.  
  72. function approveRequest(uint reqIndex) public {
  73. require(approvers[msg.sender]);
  74. Request storage request = requests[reqIndex];
  75.  
  76. require(!request.approvals[msg.sender]);
  77. request.approvals[msg.sender] = true;
  78. request.approvalCount ++;
  79.  
  80. }
  81.  
  82. function finalizeRequest(uint reqIndex) public onlyBy(manager){
  83.  
  84. Request storage request = requests[reqIndex];
  85. require (!request.complete, "can't approve req already complete");
  86. require ( request.approvalCount > approversCount / 2, "require at least half approvers' approval");
  87.  
  88. request.recipient.transfer(request.amount);
  89. request.complete = true;
  90. }
  91.  
  92.  
  93. function getBalance() public view returns(uint) {
  94. return address(this).balance;
  95. }
  96.  
  97. function getSummary() public view returns (
  98. uint, uint, uint, uint, address
  99. ) {
  100. return (
  101. minimumContribution,
  102. address(this).balance,
  103. requests.length,
  104. approversCount,
  105. manager
  106. );
  107. }
  108. }
Add Comment
Please, Sign In to add comment