Skip to content

Commit

Permalink
issue #15
Browse files Browse the repository at this point in the history
  • Loading branch information
SamR1 committed May 8, 2017
1 parent ca68bcd commit 0055028
Show file tree
Hide file tree
Showing 6 changed files with 120 additions and 83 deletions.
2 changes: 1 addition & 1 deletion dapp/fct.py
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ def get_sensor_data(url, port, data, headers, sensorId, kwh, t0, t1):
"""
This function is getting consumtion data from the <sensorID>, between <t0> and <t1>.
(I guess) <kwh> is the type of energy (like power/energy/average/peak or so ?!)
Data are provided by a POST api on the <url> with credential line given in <data> and <headers>.
"""
Expand Down
107 changes: 72 additions & 35 deletions dapp/static/js/abi.js
Original file line number Diff line number Diff line change
@@ -1,17 +1,4 @@
var abiArray = [
{
"constant": false,
"inputs": [],
"name": "getEnergyConsumption",
"outputs": [
{
"name": "energyBal",
"type": "uint256"
}
],
"payable": false,
"type": "function"
},
{
"constant": false,
"inputs": [
Expand All @@ -38,9 +25,31 @@ var abiArray = [
"payable": false,
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
}
],
"name": "energyProduction",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
"payable": false,
"type": "function"
},
{
"constant": false,
"inputs": [
{
"name": "origin",
"type": "address"
},
{
"name": "energy",
"type": "uint256"
Expand All @@ -49,7 +58,29 @@ var abiArray = [
"name": "consumeEnergy",
"outputs": [
{
"name": "EnergyBal",
"name": "EnergyCons",
"type": "uint256"
}
],
"payable": false,
"type": "function"
},
{
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
},
{
"name": "",
"type": "address"
}
],
"name": "energyConsumption",
"outputs": [
{
"name": "",
"type": "uint256"
}
],
Expand Down Expand Up @@ -97,46 +128,47 @@ var abiArray = [
"name": "setProduction",
"outputs": [
{
"name": "EnergyBal",
"name": "EnergyProd",
"type": "uint256"
}
],
"payable": false,
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "getRate",
"outputs": [
"constant": true,
"inputs": [
{
"name": "energyRate",
"type": "uint256"
"name": "",
"type": "address"
}
],
"payable": false,
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "getEnergyBalance",
"name": "totalEnergyConsumption",
"outputs": [
{
"name": "energyBal",
"name": "",
"type": "uint256"
}
],
"payable": false,
"type": "function"
},
{
"constant": false,
"inputs": [],
"name": "getEnergyProduction",
"constant": true,
"inputs": [
{
"name": "",
"type": "address"
},
{
"name": "",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"name": "energyBal",
"name": "",
"type": "uint256"
}
],
Expand All @@ -145,8 +177,8 @@ var abiArray = [
},
{
"inputs": [],
"payable": false,
"type": "constructor"
"type": "constructor",
"payable": true
},
{
"anonymous": false,
Expand All @@ -173,6 +205,11 @@ var abiArray = [
"name": "from",
"type": "address"
},
{
"indexed": false,
"name": "origin",
"type": "address"
},
{
"indexed": false,
"name": "energy",
Expand Down
8 changes: 5 additions & 3 deletions dapp/static/js/init.js
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,11 @@ $.getJSON("http://" + ip + "/getconfig/", function (data) {
d.setUTCSeconds(timeStamp);
$("#latestBlockTimestamp").text(d);

// Contract energy balance: call (not state changing)
var energyBalance = contract.getEnergyBalance.call();
$("#energyBalance").text(energyBalance);
var energyProduction = contract.energyProduction(account);
$("#energyProduction").text(energyProduction);

var energyConsumption = contract.totalEnergyConsumption(account);
$("#energyConsumption").text(energyConsumption);

$("#startedAt").text(now);

Expand Down
8 changes: 5 additions & 3 deletions dapp/static/js/main.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,11 @@ $.getJSON("http://" + ip + "/getconfig/", function (data) {
d.setUTCSeconds(timeStamp);
$("#latestBlockTimestamp").text(d);

// Contract energy balance: call (not state changing)
var energyBalance = contract.getEnergyBalance.call();
$("#energyBalance").text(energyBalance);
var energyProduction = contract.energyProduction(account);
$("#energyProduction").text(energyProduction);

var energyConsumption = contract.totalEnergyConsumption(account);
$("#energyConsumption").text(energyConsumption);

$("#startedAt").text(now);

Expand Down
4 changes: 3 additions & 1 deletion dapp/templates/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,9 @@ <h3><font id="nodeName"></font> (<font id="nodeType"></font>)</h3>
<h4>My account</h4>
<h5>Address: <br><strong id="coinbase"></strong></h5>
<h5>Token Balance (DaiseeCoin): <br><strong id="balance"></strong></h5>
<h5>Energy Balance (Watt): <br><strong id="energyBalance"></strong></h5>
<h5>Energy :</h5>
<h5>> Total consumption (Watt): <br><strong id="energyConsumption"></strong></h5>
<h5>> Total production (Watt): <br><strong id="energyProduction"></strong></h5>
</div>

<div class="col-md-8">
Expand Down
74 changes: 34 additions & 40 deletions smartcontracts/daisee.sol
Original file line number Diff line number Diff line change
Expand Up @@ -6,23 +6,30 @@ contract Daisee {
uint private rate;
bool private transactionOK;
//// utilisateurs
mapping (address => uint) energyProduction;
mapping (address => uint) energyBalance;
mapping (address => uint) energyConsumption;
mapping (address => uint) public energyProduction;
mapping (address => uint) public totalEnergyConsumption;
///// energyConsumption[msg.sender][origin]
mapping (address => mapping (address => uint256)) public energyConsumption;
///// allowance[seller][msg.sender]
mapping (address => mapping (address => uint256)) public allowance;

// constructeur
function Daisee() {
rate = 1; // (=> 1W = 1 DaiseeCoin)
}

// définition des events pour les appels à partir des clients légers
// définition des events (pour affichage à partir de la lecture des logs)
event Produce(address from, uint energy);
event Consume(address from, uint energy);
event Consume(address from, address origin, uint energy);
event Buy(address from, address to, uint energy);


// fonction permettant de payer en DaiseeCoin
function sendCoin(address coinContractAddress, address energyBuyer, address energySeller, uint amount) returns (bool success){
function sendCoin(address coinContractAddress,
address energyBuyer,
address energySeller,
uint amount)
returns (bool success){
token m = token(coinContractAddress);
success = m.transferFrom(energyBuyer, energySeller, amount);
return success;
Expand All @@ -32,59 +39,46 @@ contract Daisee {
// fonction permettant de mettre à jour l'énergie produite et
// donc dispo à la vente
// seul le propriétaire du compte peut mettre à jour sa prod
function setProduction(uint energy) returns (uint EnergyBal) {
function setProduction(uint energy) returns (uint EnergyProd) {
energyProduction[msg.sender] += energy;
energyBalance[msg.sender] += energy;

//event
Produce(msg.sender, energy);
return energyBalance[msg.sender];

return energyProduction[msg.sender];
}

// fonction permettant de consommer de l'énergie
// seul le propriétaire du compte peut mettre à jour sa prod
function consumeEnergy (uint energy) returns (uint EnergyBal) {
// on vérifie d'abord qu'il y a d'énergie
if ( energy > energyBalance[msg.sender] ) throw;
energyBalance[msg.sender] -= energy;
energyConsumption[msg.sender] += energy;
function consumeEnergy (address origin, uint energy) returns (uint EnergyCons) {
// dans le cas où on achète de l'énergie d'un autre noeud
if ( origin != msg.sender &&
energy > allowance[origin][msg.sender] ) throw;
else allowance[origin][msg.sender] -= energy;

energyConsumption[msg.sender][origin] += energy;
totalEnergyConsumption[msg.sender] += energy;

// event
Consume(msg.sender, energy);
return energyBalance[msg.sender];
Consume(msg.sender, origin, energy);

return totalEnergyConsumption[msg.sender];
}

// fonction permettant la vente d'énergie
function buyEnergy(address coinContractAddress, address seller, uint energy) returns (bool transactionOK) {
// on vérifie qu'il y a suffisamment d'énergie dispo
if ( energy > energyBalance[seller] ) throw;
// appel de la fonction de transfer de DaiseeCoin
// 1W = 1DaiseeCoin, pas de besoin de conversion
transactionOK = sendCoin(coinContractAddress, msg.sender, seller, energy);
if (transactionOK != true) throw;
// on met à jour les balances de chaque utilisateur
energyBalance[msg.sender] += energy;
energyBalance[seller] -= energy;

// on met à jour la quantité d'énergie pouvant être consommée
allowance[seller][msg.sender] += energy;

//event
Buy(msg.sender, seller, energy);
return transactionOK;
}

// fonction permettant de connaitre sa balance d'energie
function getEnergyBalance() returns (uint energyBal) {
return energyBalance[msg.sender];
}

// fonction permettant de connaitre sa consommation totale
function getEnergyConsumption() returns (uint energyBal) {
return energyConsumption[msg.sender];
return transactionOK;
}

// fonction permettant de connaitre sa production totale
function getEnergyProduction() returns (uint energyBal) {
return energyProduction[msg.sender];
}

// fonction permettant de connaitre le tarif de l'energie
function getRate() returns (uint energyRate) {
return rate;
}
}

0 comments on commit 0055028

Please sign in to comment.