Guest User

Untitled

a guest
Jun 23rd, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.46 KB | None | 0 0
  1. pragma solidity ^0.4.17;
  2.  
  3. contract Campagin{
  4. struct Request {
  5. string description;
  6. uint value;
  7. address recipient;
  8. bool complete;
  9. uint approvalCount;
  10. mapping(address => bool) approvals;
  11.  
  12. }
  13. Request [] public requests;
  14. address public manager;
  15. uint public minimumContribution;
  16. mapping(address => bool) public approvers;
  17. uint public approversCount;
  18. modifier restricted(){
  19. require(msg.sender==manager);
  20. _;
  21. }
  22.  
  23. constructor (uint minimum) public{
  24. manager=msg.sender;
  25. minimumContribution=minimum;
  26. }
  27.  
  28. function contribute() public payable{
  29. require(msg.value> minimumContribution);
  30. approvers[msg.sender]=true;
  31. approversCount++;
  32. }
  33. function createRequest(string description, uint value, address recipient) public restricted
  34. {
  35. Request memory newRequest= Request({
  36. description: description,
  37. value: value,
  38. recipient: recipient,
  39. complete: false,
  40. approvalCount: 0
  41. });
  42. requests.push(newRequest);
  43. }
  44. function approveRequest(uint index) public{
  45. Request storage request= requests[index];
  46. require(approvers[msg.sender]);
  47. require(!requests[index].approvals[msg.sender]);
  48. request.approvals[msg.sender]=true;
  49. request.approvalCount++;
  50. }
  51. function finalizeRequest(uint index) public restricted{
  52. Request storage request= requests[index];
  53. require(!requests[index].complete);
  54. require(request.approvalCount>(approversCount/2));
  55. request.recipient.transfer(request.value);
  56. requests[index].complete=true;
  57.  
  58. }
  59. }
Add Comment
Please, Sign In to add comment