-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPayments.sol
46 lines (35 loc) · 1.25 KB
/
Payments.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;
contract Payments {
uint minApprovers;
address payable beneficiary;
address payable owner;
mapping (address => bool) approvedBy;
mapping (address => bool) isApprover;
uint approvalsNum;
constructor(address[] memory _approvers, uint _minApprovers, address payable _beneficiary) public payable {
require(_minApprovers <= _approvers.length, "O número necessário de aprovadores deve ser menor que o número de aprovadores");
minApprovers = _minApprovers;
beneficiary = _beneficiary;
owner = msg.sender;
for (uint i = 0; i < _approvers.length; i++) {
address approver = _approvers[i];
isApprover[approver] = true;
}
}
function approve() public {
require(isApprover[msg.sender], "Não é um aprovador");
if (!approvedBy[msg.sender]) {
approvedBy[msg.sender] = true;
approvalsNum++;
}
if (approvalsNum == minApprovers) {
beneficiary.send(address(this).balance);
selfdestruct(owner);
}
}
function reject() public {
require(isApprover[msg.sender], "Não é um aprovador");
selfdestruct(owner);
}
}