Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- pragma solidity ^0.4.17;
- contract Campagin{
- struct Request {
- string description;
- uint value;
- address recipient;
- bool complete;
- uint approvalCount;
- mapping(address => bool) approvals;
- }
- Request [] public requests;
- address public manager;
- uint public minimumContribution;
- mapping(address => bool) public approvers;
- uint public approversCount;
- modifier restricted(){
- require(msg.sender==manager);
- _;
- }
- constructor (uint minimum) public{
- manager=msg.sender;
- minimumContribution=minimum;
- }
- function contribute() public payable{
- require(msg.value> minimumContribution);
- approvers[msg.sender]=true;
- approversCount++;
- }
- function createRequest(string description, uint value, address recipient) public restricted
- {
- Request memory newRequest= Request({
- description: description,
- value: value,
- recipient: recipient,
- complete: false,
- approvalCount: 0
- });
- requests.push(newRequest);
- }
- function approveRequest(uint index) public{
- Request storage request= requests[index];
- require(approvers[msg.sender]);
- require(!requests[index].approvals[msg.sender]);
- request.approvals[msg.sender]=true;
- request.approvalCount++;
- }
- function finalizeRequest(uint index) public restricted{
- Request storage request= requests[index];
- require(!requests[index].complete);
- require(request.approvalCount>(approversCount/2));
- request.recipient.transfer(request.value);
- requests[index].complete=true;
- }
- }
Add Comment
Please, Sign In to add comment