forked from fossee-ethera/Smart-Contracts
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathEscrow.sol
66 lines (57 loc) · 2 KB
/
Escrow.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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
pragma solidity ^0.5.0;
import './ExampleToken.sol';
contract Escrow
{
ExampleToken token;
enum State {Requested,Process,Validated}
uint public count;
struct Verify{
address validator;
address candidate;
string sign;
uint request_number;
State state;
}
mapping(uint=> Verify) public mark;
event Success(address validator, string sign);
constructor(ExampleToken _token) public {
token=_token;
count=0;
}
function Request() public{
count+=1;
mark[count].candidate=msg.sender;
mark[count].state=State.Requested;
mark[count].request_number=count;
token.approve1(mark[count].candidate,address(this),10);
token.transferFrom1(mark[count].candidate,address(this),10);
}
function ForwardRequest(uint i,address _validator) public{
require(mark[i].state==State.Requested);
mark[i].validator=_validator;
mark[i].state=State.Process;
}
function Validate(uint j, string memory _sign) public validator(j) {
token.approve1(address(this),msg.sender,10);
mark[j].sign=_sign;
token.transferFrom1(address(this),msg.sender,10);
emit Success(mark[j].validator,mark[j].sign);
mark[j].state=State.Validated;
}
function reject(uint j) public validator(j){
token.approve1(address(this),msg.sender,5);
token.approve1(address(this),mark[j].candidate,5);
token.transferFrom1(address(this),msg.sender,5);
token.transferFrom1(address(this),mark[j].candidate,5);
mark[j].state=State.Validated;
}
modifier validator(uint j){
require(mark[j].request_number==j,'request_number not same.');
require(mark[j].state==State.Process,'State is not same');
require(mark[j].validator==msg.sender,'You are not authorized.');
_;
}
function getSign(uint j) public view returns (string memory) {
return mark[j].sign;
}
}