stromdao-businessobject
Version:
Abstract BusinessObject for StromDAO Energy Blockchain. Abstraction layer between blockchain technology and business logic providing energy market related entities and use cases.
120 lines (116 loc) • 3.83 kB
JavaScript
/**
* StromDAO Business Object: MPR
* =========================================
* Meter Point Operator handling for StromDAO Energy Blockchain.
*
* In general a Meter Point Operating (Contract) handles meter readings and issues Deliverables as soon as a new reading is received.
*
* @author Thorsten Zoerner thorsten.zoerner@stromdao.de
* */
this.furyuser = function(obj_or_address) {
var p1 = new Promise(function(resolve, reject) {
var instance={};
instance.test = {};
/**
* Stores a reading to this contract instance. Requires sender to be approved Meter-Point
* @see approveMP()
*/
instance.setRole= function(role,address) {
var p2 = new Promise(function(resolve2, reject2) {
parent.roleLookup().then(function(rl) {
rl.setRelation(role,address).then(function(tx) {
resolve2(tx);
});
});
});
return p2;
};
instance.setRoleValue=function(role,value) {
var p2 = new Promise(function(resolve2, reject2) {
parent.stringstoragefactory().then(function(ssf) {
ssf.build(value).then(function(address) {
parent.furyuser().then(function(furyuser) {
furyuser.setRole(role,address).then(function(tx) {
resolve2(tx);
});
});
});
});
});
return p2;
};
instance.getRole=function(role) {
var p2 = new Promise(function(resolve2, reject2) {
parent.roleLookup().then(function(rl) {
rl.relations(parent.wallet.address,role).then(function(tx) {
resolve2(tx);
});
});
});
return p2;
};
instance.getRoleValue= function(role) {
var p2 = new Promise(function(resolve2, reject2) {
parent.furyuser().then(function(furyuser) {
furyuser.getRole(role).then(function(tx) {
if(tx=="0x0000000000000000000000000000000000000000") {
console.log("Nothing linked to role",role);
resolve2();
} else {
parent.stringstorage(tx).then(function(ss) {
ss.str().then(function(str) {
resolve2(str);
});
});
}
});
});
});
return p2;
};
instance.setUserKeys = function(account_obj) {
var p2 = new Promise(function(resolve2, reject2) {
account_obj.encrypt(parent.wallet.privateKey).then(function(enc) {
account_obj.encrypt(parent.RSAPrivateKey).then(function(enc_rsa) {
parent.stringstoragefactory().then(function(ssf) {
ssf.build(enc).then(function(ss) {
ssf.build(enc_rsa).then(function(ss_rsa) {
ssf.build(parent.RSAPublicKey).then(function(ss_pub) {
parent.roleLookup().then(function(rl) {
rl.setRelation(224,ss_pub).then(function() {
rl.setRelation(223,ss_rsa).then(function() {
rl.setRelation(222,ss).then(function(tx) {
resolve2(tx);
});
});
});
});
});
});
});
});
});
});
});
return p2;
}
instance.getRSAKeys = function(account_obj) {
var p2 = new Promise(function(resolve2, reject2) {
parent.furyuser().then(function(furyuser) {
furyuser.getRoleValue(224).then(function(rsa_pub) {
account_obj.RSAPublicKey=rsa_pub;
furyuser.getRoleValue(223).then(function(rsa_priv_enc) {
account_obj.decrypt(rsa_priv_enc).then(function(rsa_priv) {
account_obj.RSAPrivateKey=rsa_priv;
resolve2();
});
});
});
});
});
return p2;
};
resolve(instance);
});
return p1;
};