Skip to content

Commit e370331

Browse files
committed
Escrow contract with Kovan AGI deposit/withdraw
1 parent dcbb5b2 commit e370331

File tree

3 files changed

+87
-31
lines changed

3 files changed

+87
-31
lines changed

contracts/market/Escrow.sol

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
pragma solidity ^0.4.18;
2+
3+
import "./Job.sol";
4+
import "zeppelin-solidity/contracts/token/ERC20.sol";
5+
6+
contract Escrow is Job {
7+
/**
8+
* @dev Kovan AGI token.
9+
* https://kovan.etherscan.io/token/0x3b226ff6aad7851d3263e53cb7688d13a07f6e81#readContract
10+
*/
11+
ERC20 public constant AGI = ERC20(0x3b226ff6aad7851d3263e53cb7688d13a07f6e81);
12+
13+
/**
14+
* @dev Vault mapping
15+
*/
16+
mapping(address => mapping(address => uint256)) public vault;
17+
18+
/**
19+
* @dev Deposited event
20+
*/
21+
event Deposited(address payer, uint256 amount);
22+
23+
/**
24+
* @dev Deposited event
25+
*/
26+
event Withdrew(address payee, uint256 amount);
27+
28+
/**
29+
* @dev Escrow constructor.
30+
* @param _payer An agent who pays the job.
31+
* @param _payee An agent to whom the job is paid.
32+
* @param _cost Cost in AGI
33+
* @param _reward reward for validator
34+
*/
35+
function Escrow(
36+
address _payer,
37+
address _payee,
38+
bytes32 _descriptor,
39+
uint256 _cost,
40+
uint256 _reward ) public
41+
{
42+
payer = _payer;
43+
payee = _payee;
44+
descriptor = _descriptor;
45+
cost = _cost;
46+
reward = _reward;
47+
48+
provider = payee;
49+
start = now;
50+
51+
Started(payer, payee, descriptor, address(this));
52+
}
53+
54+
55+
function deposit(uint256 amount) public {
56+
require(AGI.transferFrom(msg.sender, this, amount));
57+
58+
Deposited(msg.sender,amount);
59+
}
60+
61+
function withdraw() public {
62+
require(msg.sender == payee);
63+
require(status == 1);
64+
uint256 balance = AGI.balanceOf(this);
65+
require(AGI.transfer(msg.sender, balance));
66+
Withdrew(msg.sender, balance);
67+
}
68+
}

contracts/market/Job.sol

Lines changed: 15 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,10 @@ import "./JobValidator.sol";
66
*/
77
contract Job is JobValidator {
88

9-
/**
10-
* @dev Kovan AGI token.
11-
* https://kovan.etherscan.io/token/0x3b226ff6aad7851d3263e53cb7688d13a07f6e81#readContract
12-
* ERC20Basic public constant AGI = ERC20Basic(0x3b226ff6aad7851d3263e53cb7688d13a07f6e81);
13-
*/
14-
9+
/**
10+
* @dev Who can set the result
11+
*/
12+
address provider;
1513
/**
1614
* @dev Cost in AGI for the exection of the job
1715
* (10**8 cogs === 1 AGI)
@@ -23,31 +21,12 @@ contract Job is JobValidator {
2321
*/
2422
event Started(address indexed payer, address indexed payee, bytes32 descriptor, address job);
2523

26-
/**
27-
* @dev Job constructor.
28-
* @param _payer An agent who pays the job.
29-
* @param _payee An agent to whom the job is paid.
30-
* @param _cost Cost in AGI
31-
*/
32-
function Job(address _payer, address _payee, bytes32 _descriptor, uint256 _cost, uint256 _reward) public {
33-
34-
payer = _payer;
35-
payee = _payee;
36-
descriptor = _descriptor;
37-
cost = _cost;
38-
reward = _reward;
39-
40-
start = now;
41-
42-
Started(payer, payee, descriptor, address(this));
43-
}
44-
4524
/**
4625
* @dev Set result of this Job
4726
* @param _result Result data hash
4827
*/
4928
function setResult(bytes32 _result) public returns (bool) {
50-
require(msg.sender == payee);
29+
require(msg.sender == provider);
5130
require(descriptor.length > 0);
5231

5332
end = now;
@@ -60,6 +39,16 @@ contract Job is JobValidator {
6039
return true;
6140
}
6241

42+
/**
43+
* @dev The payee can change the provider address
44+
* @param _provider New provider
45+
*/
46+
function setProvider(address _provider) public returns(bool) {
47+
require(msg.sender == payee);
48+
provider = _provider;
49+
return true;
50+
}
51+
6352

6453

6554
}

test/TestJob.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
1-
const Job = artifacts.require('market/Job.sol')
1+
const Escrow = artifacts.require('market/Escrow.sol')
22

33

4-
contract('Job', function ([payee, payer]) {
4+
contract('Escrow', function ([payee, payer]) {
55

66
beforeEach(async () => {
77
const jobDescriptor = "0x0"
8-
this.job = await Job.new(payer, payee, jobDescriptor, 800, 0)
9-
console.log(this.job)
8+
this.job = await Escrow.new(payer, payee, jobDescriptor, 800, 0)
109
})
1110

1211

@@ -20,7 +19,7 @@ contract('Job', function ([payee, payer]) {
2019

2120
const found2 = result.logs.find(e => e.event === 'Completed')
2221
assert.strictEqual(found2.event, 'Completed', 'Completed event not fired')
23-
22+
2423
})
2524

2625

0 commit comments

Comments
 (0)