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.
164 lines (157 loc) • 6.2 kB
JavaScript
/*
* StromDAO Business Object: Transferable
* =========================================
* Stable Balance and Transfer handling for StromDAO Energy Blockchain.
*
* @author Thorsten Zoerner thorsten.zoerner@stromdao.de
* */
function split64(data) { return "0x"+data.substr(0,64);}
function remain64(data) { return data.substr(64);}
this.transferable = function(obj_or_address) {
if(typeof obj_or_address == "undefined") obj_or_address=parent.options.contracts["StromDAO-BO.sol_Transferable"];
var p1 = new Promise(function(resolve, reject) {
var instance=parent._objInstance(obj_or_address,'StromDAO-BO.sol_Transferable');
instance.addRx=function(address_to,address_msg,uint256_value,uint256_base,bool_is_liability) {
var p2 = new Promise(function(resolve2, reject2) {
instance.obj.addRx(address_to,address_msg,uint256_value,uint256_base,bool_is_liability).then(function(o) {
parent._waitForTransactionKeepRef(o,resolve2);
});
});
return p2;
};
instance.balancesSoll=function(address_account) {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
instance.obj.balanceSoll(address_account).then(function(o) {
resolve2(o[0].toString()*1);
});
});
return p2;
};
instance.balancesHaben=function(address_account) {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
instance.obj.balanceHaben(address_account).then(function(o) {
resolve2(o[0].toString()*1);
});
});
return p2;
};
instance.baseSoll=function(address_account) {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
instance.obj.baseSoll(address_account).then(function(o) {
resolve2(o[0].toString()*1);
});
});
return p2;
};
instance.baseHaben=function(address_account) {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
instance.obj.baseHaben(address_account).then(function(o) {
resolve2(o[0].toString()*1);
});
});
return p2;
};
instance.balancesCachedSoll=function(address_account) {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
var stored = parent.storage.getItemSync(obj_or_address+"_"+address_account+"_soll");
if((typeof stored == "undefined")||(stored==null)) {
instance.obj.balanceSoll(address_account).then(function(o) {
parent.storage.setItemSync(obj_or_address+"_"+address_account+"_soll",o[0].toString()*1);
resolve2(o[0].toString()*1);
});
} else {
resolve2(stored);
}
});
return p2;
};
instance.balancesCachedHaben=function(address_account) {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
var stored = parent.storage.getItemSync(obj_or_address+"_"+address_account+"_haben");
if((typeof stored == "undefined")||(stored==null)) {
instance.obj.balanceHaben(address_account).then(function(o) {
parent.storage.setItemSync(obj_or_address+"_"+address_account+"_haben",o[0].toString()*1);
resolve2(o[0].toString()*1);
});
} else {
resolve2(stored);
}
});
return p2;
};
instance.sumBase=function() {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
instance.obj.sumBase().then(function(o) {
resolve2(o[0].toString()*1);
});
});
return p2;
};
instance.sumTx=function() {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
instance.obj.sumTx().then(function(o) {
resolve2(o[0].toString()*1);
});
});
return p2;
};
instance.owner=function() {
var p2 = new Promise(function(resolve2, reject2) {
//console.log(instance.obj);
instance.obj.owner().then(function(o) {
resolve2(o);
});
});
return p2;
};
instance.history=function(address_meterpoint,length) {
var p2 = new Promise(function(resolve2, reject2) {
parent.rpcprovider.getBlockNumber().then(function(latest_block) {
parent.wallet.provider.getLogs({address:obj_or_address,fromBlock:latest_block-length,toBlock:latest_block}).then(
function(logs) {
entries=[];
for(var i=0;i<logs.length;i++) {
var data = logs[i].data;
if(data.length==386) {
data=data.substr(2);
_from ="0x"+ split64(data).substr(26);
data=data.substr(64);
_to ="0x"+split64(data).substr(26);
data=data.substr(64);
_msg ="0x"+split64(data).substr(26);
data=data.substr(64);
_value =(split64(data));
data=data.substr(64);
_base =(split64(data));
data=data.substr(64);
if((_from.toLowerCase()==address_meterpoint.toLowerCase())||(_to.toLowerCase()==address_meterpoint.toLowerCase())) {
var entry={};
entry.sender=_from;
entry.recipient=_to;
entry.msg=_msg;
entry.base=_base;
entry.value=_value;
entry.data=data;
entry.blockNumber=logs[i].blockNumber;
entries.push(entry);
}
}
}
resolve2(entries);
});
});
});
return p2;
};
resolve(instance);
});
return p1;
};