Skip to content

Commit 400d3c4

Browse files
author
francois branciard
committed
#16 add m_totalAppCount m_totalDatasetCount m_totalWorkerPoolCount in Hubs
1 parent e147adb commit 400d3c4

File tree

7 files changed

+750
-10
lines changed

7 files changed

+750
-10
lines changed

contracts/AppHub.sol

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ contract AppHub is OwnableOZ // is Owned by IexecHub
1616
mapping(address => mapping(uint256 => address)) m_appByOwnerByIndex;
1717
mapping(address => bool) m_appRegistered;
1818

19+
mapping(uint256 => address) m_appByIndex;
20+
uint256 public m_totalAppCount;
21+
1922
/**
2023
* Constructor
2124
*/
@@ -38,13 +41,19 @@ contract AppHub is OwnableOZ // is Owned by IexecHub
3841
{
3942
return m_appByOwnerByIndex[_owner][_index];
4043
}
44+
function getAppByIndex(uint256 _index) public view returns (address)
45+
{
46+
return m_appByIndex[_index];
47+
}
4148

4249
function addApp(address _owner, address _app) internal
4350
{
4451
uint id = m_appCountByOwner[_owner].add(1);
45-
m_appCountByOwner [_owner] = id;
46-
m_appByOwnerByIndex[_owner][id] = _app;
47-
m_appRegistered [_app] = true;
52+
m_totalAppCount=m_totalAppCount.add(1);
53+
m_appByIndex [m_totalAppCount] = _app;
54+
m_appCountByOwner [_owner] = id;
55+
m_appByOwnerByIndex[_owner][id] = _app;
56+
m_appRegistered [_app] = true;
4857
}
4958

5059
function createApp(

contracts/DatasetHub.sol

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ contract DatasetHub is OwnableOZ // is Owned by IexecHub
1515
mapping(address => mapping(uint256 => address)) m_datasetByOwnerByIndex;
1616
mapping(address => bool) m_datasetRegistered;
1717

18+
mapping(uint256 => address) m_datasetByIndex;
19+
uint256 public m_totalDatasetCount;
20+
21+
1822

1923
/**
2024
* Constructor
@@ -38,13 +42,19 @@ contract DatasetHub is OwnableOZ // is Owned by IexecHub
3842
{
3943
return m_datasetByOwnerByIndex[_owner][_index];
4044
}
45+
function getDatasetByIndex(uint256 _index) public view returns (address)
46+
{
47+
return m_datasetByIndex[_index];
48+
}
4149

4250
function addDataset(address _owner, address _dataset) internal
4351
{
4452
uint id = m_datasetCountByOwner[_owner].add(1);
45-
m_datasetCountByOwner [_owner] = id;
46-
m_datasetByOwnerByIndex[_owner][id] = _dataset;
47-
m_datasetRegistered [_dataset] = true;
53+
m_totalDatasetCount = m_totalDatasetCount.add(1);
54+
m_datasetByIndex [m_totalDatasetCount] = _dataset;
55+
m_datasetCountByOwner [_owner] = id;
56+
m_datasetByOwnerByIndex[_owner][id] = _dataset;
57+
m_datasetRegistered [_dataset] = true;
4858
}
4959

5060
function createDataset(

contracts/WorkerPoolHub.sol

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,11 @@ contract WorkerPoolHub is OwnableOZ // is Owned by IexecHub
2222
/* mapping(address => address) m_ownerByWorkerPool; */
2323
mapping(address => bool) m_workerPoolRegistered;
2424

25+
mapping(uint256 => address) m_workerPoolByIndex;
26+
uint256 public m_totalWorkerPoolCount;
27+
28+
29+
2530
/**
2631
* Constructor
2732
*/
@@ -44,6 +49,10 @@ contract WorkerPoolHub is OwnableOZ // is Owned by IexecHub
4449
{
4550
return m_workerPoolByOwnerByIndex[_owner][_index];
4651
}
52+
function getWorkerPoolByIndex(uint256 _index) public view returns (address)
53+
{
54+
return m_workerPoolByIndex[_index];
55+
}
4756
function getWorkerAffectation(address _worker) public view returns (address workerPool)
4857
{
4958
return m_workerAffectation[_worker];
@@ -52,9 +61,11 @@ contract WorkerPoolHub is OwnableOZ // is Owned by IexecHub
5261
function addWorkerPool(address _owner, address _workerPool) internal
5362
{
5463
uint id = m_workerPoolCountByOwner[_owner].add(1);
55-
m_workerPoolCountByOwner [_owner] = id;
56-
m_workerPoolByOwnerByIndex[_owner][id] = _workerPool;
57-
m_workerPoolRegistered [_workerPool] = true;
64+
m_totalWorkerPoolCount = m_totalWorkerPoolCount.add(1);
65+
m_workerPoolByIndex [m_totalWorkerPoolCount] = _workerPool;
66+
m_workerPoolCountByOwner [_owner] = id;
67+
m_workerPoolByOwnerByIndex[_owner][id] = _workerPool;
68+
m_workerPoolRegistered [_workerPool] = true;
5869
}
5970

6071
function createWorkerPool(

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "iexec-poco",
3-
"version": "1.0.11",
3+
"version": "1.0.13",
44
"description": "",
55
"main": "truffle.js",
66
"scripts": {
Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
var RLC = artifacts.require("../node_modules/rlc-token//contracts/RLC.sol");
2+
var IexecHub = artifacts.require("./IexecHub.sol");
3+
var WorkerPoolHub = artifacts.require("./WorkerPoolHub.sol");
4+
var AppHub = artifacts.require("./AppHub.sol");
5+
var DatasetHub = artifacts.require("./DatasetHub.sol");
6+
var WorkerPool = artifacts.require("./WorkerPool.sol");
7+
var Marketplace = artifacts.require("./Marketplace.sol");
8+
var App = artifacts.require("./App.sol");
9+
10+
const BN = require("bn");
11+
const keccak256 = require("solidity-sha3");
12+
const Promise = require("bluebird");
13+
const fs = require("fs-extra");
14+
//extensions.js : credit to : https://github.com/coldice/dbh-b9lab-hackathon/blob/development/truffle/utils/extensions.js
15+
const Extensions = require("../../../utils/extensions.js");
16+
const addEvmFunctions = require("../../../utils/evmFunctions.js");
17+
const readFileAsync = Promise.promisify(fs.readFile);
18+
19+
addEvmFunctions(web3);
20+
Promise.promisifyAll(web3.eth, {
21+
suffix: "Promise"
22+
});
23+
Promise.promisifyAll(web3.version, {
24+
suffix: "Promise"
25+
});
26+
Promise.promisifyAll(web3.evm, {
27+
suffix: "Promise"
28+
});
29+
Extensions.init(web3, assert);
30+
var constants = require("../../constants");
31+
32+
contract('IexecHub', function(accounts) {
33+
34+
let scheduleProvider, resourceProvider, appProvider, datasetProvider, dappUser, dappProvider, iExecCloudUser, marketplaceCreator;
35+
let isTestRPC;
36+
let txMined;
37+
let txsMined;
38+
let testTimemout = 0;
39+
let aRLCInstance;
40+
let aIexecHubInstance;
41+
let aWorkerPoolHubInstance;
42+
let aAppHubInstance;
43+
let aDatasetHubInstance;
44+
let aMarketplaceInstance;
45+
46+
beforeEach("should prepare accounts and check TestRPC Mode", async() => {
47+
assert.isAtLeast(accounts.length, 8, "should have at least 8 accounts");
48+
scheduleProvider = accounts[0];
49+
resourceProvider = accounts[1];
50+
appProvider = accounts[2];
51+
datasetProvider = accounts[3];
52+
dappUser = accounts[4];
53+
dappProvider = accounts[5];
54+
iExecCloudUser = accounts[6];
55+
marketplaceCreator = accounts[7];
56+
57+
await Extensions.makeSureAreUnlocked(
58+
[scheduleProvider, resourceProvider, appProvider, datasetProvider, dappUser, dappProvider, iExecCloudUser]);
59+
let balance = await web3.eth.getBalancePromise(scheduleProvider);
60+
assert.isTrue(
61+
web3.toWei(web3.toBigNumber(80), "ether").lessThan(balance),
62+
"dappProvider should have at least 80 ether, not " + web3.fromWei(balance, "ether"));
63+
await Extensions.refillAccount(scheduleProvider, resourceProvider, 10);
64+
await Extensions.refillAccount(scheduleProvider, appProvider, 10);
65+
await Extensions.refillAccount(scheduleProvider, datasetProvider, 10);
66+
await Extensions.refillAccount(scheduleProvider, dappUser, 10);
67+
await Extensions.refillAccount(scheduleProvider, dappProvider, 10);
68+
await Extensions.refillAccount(scheduleProvider, iExecCloudUser, 10);
69+
await Extensions.refillAccount(scheduleProvider, marketplaceCreator, 10);
70+
let node = await web3.version.getNodePromise();
71+
isTestRPC = node.indexOf("EthereumJS TestRPC") >= 0;
72+
// INIT RLC
73+
aRLCInstance = await RLC.new({
74+
from: marketplaceCreator,
75+
gas: constants.AMOUNT_GAS_PROVIDED
76+
});
77+
console.log("aRLCInstance.address is ");
78+
console.log(aRLCInstance.address);
79+
let txMined = await aRLCInstance.unlock({
80+
from: marketplaceCreator,
81+
gas: constants.AMOUNT_GAS_PROVIDED
82+
});
83+
assert.isBelow(txMined.receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
84+
txsMined = await Promise.all([
85+
aRLCInstance.transfer(scheduleProvider, 1000, {
86+
from: marketplaceCreator,
87+
gas: constants.AMOUNT_GAS_PROVIDED
88+
}),
89+
aRLCInstance.transfer(resourceProvider, 1000, {
90+
from: marketplaceCreator,
91+
gas: constants.AMOUNT_GAS_PROVIDED
92+
}),
93+
aRLCInstance.transfer(appProvider, 1000, {
94+
from: marketplaceCreator,
95+
gas: constants.AMOUNT_GAS_PROVIDED
96+
}),
97+
aRLCInstance.transfer(datasetProvider, 1000, {
98+
from: marketplaceCreator,
99+
gas: constants.AMOUNT_GAS_PROVIDED
100+
}),
101+
aRLCInstance.transfer(dappUser, 1000, {
102+
from: marketplaceCreator,
103+
gas: constants.AMOUNT_GAS_PROVIDED
104+
}),
105+
aRLCInstance.transfer(dappProvider, 1000, {
106+
from: marketplaceCreator,
107+
gas: constants.AMOUNT_GAS_PROVIDED
108+
}),
109+
aRLCInstance.transfer(iExecCloudUser, 1000, {
110+
from: marketplaceCreator,
111+
gas: constants.AMOUNT_GAS_PROVIDED
112+
})
113+
]);
114+
assert.isBelow(txsMined[0].receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
115+
assert.isBelow(txsMined[1].receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
116+
assert.isBelow(txsMined[2].receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
117+
assert.isBelow(txsMined[3].receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
118+
assert.isBelow(txsMined[4].receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
119+
assert.isBelow(txsMined[5].receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
120+
assert.isBelow(txsMined[6].receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
121+
let balances = await Promise.all([
122+
aRLCInstance.balanceOf(scheduleProvider),
123+
aRLCInstance.balanceOf(resourceProvider),
124+
aRLCInstance.balanceOf(appProvider),
125+
aRLCInstance.balanceOf(datasetProvider),
126+
aRLCInstance.balanceOf(dappUser),
127+
aRLCInstance.balanceOf(dappProvider),
128+
aRLCInstance.balanceOf(iExecCloudUser)
129+
]);
130+
assert.strictEqual(balances[0].toNumber(), 1000, "1000 nRLC here");
131+
assert.strictEqual(balances[1].toNumber(), 1000, "1000 nRLC here");
132+
assert.strictEqual(balances[2].toNumber(), 1000, "1000 nRLC here");
133+
assert.strictEqual(balances[3].toNumber(), 1000, "1000 nRLC here");
134+
assert.strictEqual(balances[4].toNumber(), 1000, "1000 nRLC here");
135+
assert.strictEqual(balances[5].toNumber(), 1000, "1000 nRLC here");
136+
assert.strictEqual(balances[6].toNumber(), 1000, "1000 nRLC here");
137+
138+
// INIT SMART CONTRACTS BY marketplaceCreator
139+
aWorkerPoolHubInstance = await WorkerPoolHub.new({
140+
from: marketplaceCreator
141+
});
142+
console.log("aWorkerPoolHubInstance.address is ");
143+
console.log(aWorkerPoolHubInstance.address);
144+
145+
aAppHubInstance = await AppHub.new({
146+
from: marketplaceCreator
147+
});
148+
console.log("aAppHubInstance.address is ");
149+
console.log(aAppHubInstance.address);
150+
151+
152+
// USE marketplaceCreator as owner for test. In real deployement ownership is :
153+
/*
154+
txMined = await aAppHubInstance.transferOwnership(aIexecHubInstance.address, {
155+
from: marketplaceCreator
156+
});
157+
assert.isBelow(txMined.receipt.gasUsed, constants.AMOUNT_GAS_PROVIDED, "should not use all gas");
158+
console.log("transferOwnership of AppHub to IexecHub");
159+
*/
160+
161+
162+
163+
});
164+
165+
166+
167+
it("getAppByIndex_01 : is a public function returning the app by index", async function() {
168+
169+
let createdApp = await aAppHubInstance.createApp.call(
170+
"app Name",
171+
0,
172+
"app Params", {
173+
from: marketplaceCreator,
174+
});
175+
176+
m_totalAppCount = await aAppHubInstance.m_totalAppCount.call();
177+
assert.strictEqual(m_totalAppCount.toNumber(), 0, "check m_totalAppCount");
178+
179+
getApp = await aAppHubInstance.getAppByIndex.call(1);
180+
assert.notEqual(getApp, createdApp, "check getWorkerPool");
181+
assert.strictEqual(getApp, '0x0000000000000000000000000000000000000000', "check 0x0000000000000000000000000000000000000000");
182+
183+
184+
txMined = await aAppHubInstance.createApp(
185+
"app Name",
186+
0,
187+
"app Params", {
188+
from: marketplaceCreator,
189+
});
190+
191+
getApp = await aAppHubInstance.getAppByIndex.call(1);
192+
assert.strictEqual(getApp, createdApp, "check getApp");
193+
194+
m_totalAppCount = await aAppHubInstance.m_totalAppCount.call();
195+
assert.strictEqual(m_totalAppCount.toNumber(), 1, "check m_totalAppCount");
196+
197+
let createdApp2 = await aAppHubInstance.createApp.call(
198+
"app Name 2",
199+
1,
200+
"app Params 2", {
201+
from: marketplaceCreator,
202+
});
203+
204+
txMined = await aAppHubInstance.createApp(
205+
"app Name 2",
206+
1,
207+
"app Params 2", {
208+
from: marketplaceCreator,
209+
});
210+
211+
getApp = await aAppHubInstance.getAppByIndex.call(2);
212+
assert.strictEqual(getApp, createdApp2, "check getApp");
213+
214+
m_totalAppCount = await aAppHubInstance.m_totalAppCount.call();
215+
assert.strictEqual(m_totalAppCount.toNumber(), 2, "check m_totalAppCount");
216+
217+
218+
});
219+
220+
221+
});

0 commit comments

Comments
 (0)