v0.4c -Fixed minor bugs

This commit is contained in:
sairajzero 2020-08-01 20:13:41 +05:30
parent 637f90abbc
commit 2ed7698e51

View File

@ -33,7 +33,6 @@
generalVC: {}, generalVC: {},
//bank app //bank app
policy: {},
collaterals : [] collaterals : []
} }
</script> </script>
@ -8863,22 +8862,29 @@ Bitcoin.Util = {
compactIDB.writeData("settings", content compactIDB.writeData("settings", content
.settings[l], l); .settings[l], l);
for(let c in content.removeCollateral) for (let c in content.removeCollateral)
compactIDB.removeData("collaterals", c); compactIDB.removeData("collaterals", c);
for(let c in content.addCollateral) for (let c in content.addCollateral)
compactIDB.writeData("collaterals", content.addCollateral[c], c); compactIDB.writeData("collaterals", content
.addCollateral[c], c);
} }
compactIDB.writeData("lastTx", result.totalTxs, compactIDB.writeData("lastTx", result.totalTxs,
floGlobals.adminID); floGlobals.adminID);
compactIDB.readAllData("subAdmins").then(result => { compactIDB.readAllData("subAdmins").then(result => {
floGlobals.subAdmins = Object.keys(result); floGlobals.subAdmins = Object.keys(result);
compactIDB.readAllData("settings").then(result => { compactIDB.readAllData("settings").then(
floGlobals.settings = result; result => {
compactIDB.readAllData("collaterals").then(result => { floGlobals.settings = result;
floGlobals.collaterals = result; compactIDB.readAllData(
resolve("Read app configuration from blockchain"); "collaterals").then(
result => {
floGlobals
.collaterals =
result;
resolve(
"Read app configuration from blockchain");
})
}) })
})
}) })
}) })
}).catch(error => reject(error)) }).catch(error => reject(error))
@ -9279,41 +9285,47 @@ Bitcoin.Util = {
refreshNetUnitValues() { refreshNetUnitValues() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if(typeof this.unitValues !== "object") if (typeof this.unitValues !== "object")
this.unitValues = {}; this.unitValues = {
deposit: 1
};
//fetch API call function //fetch API call function
const fetchValue = function(type){ const fetchValue = function (type) {
return new Promise((res, rej) => { return new Promise((res, rej) => {
let c = floGlobals.collaterals[c] let c = floGlobals.collaterals[c]
fetch(c.url).then(response => { fetch(c.url).then(response => {
if(response.ok){ if (response.ok) {
response.json().then(data => { response.json().then(data => {
let value; let value;
if(!c.path) if (!c.path)
value = data; value = data;
else if(Array.isArray(c.path)){ else if (Array.isArray(c.path)) {
value = data; value = data;
for(p of path) for (p of path)
value = value[p]; value = value[p];
} else } else
value = data[path]; value = data[path];
if(c.multiplier) if (c.multiplier)
value *= c.multiplier; value *= c.multiplier;
this.unitValues[type] = value; this.unitValues[type] = value;
resolve({[type]: value}) resolve({
[type]: value
})
}); });
} else } else
throw Error("Response Not Valid") throw Error("Response Not Valid")
}).catch(error => { }).catch(error => {
this.unitValues[type] = NaN; this.unitValues[type] = NaN;
resolve({[type]: error}) resolve({
[type]: error
})
}) })
}) })
} }
let promises = []; let promises = [];
for(let c in floGlobals.collaterals) for (let c in floGlobals.collaterals)
promises.push(fetchValue(c)) promises.push(fetchValue(c))
Promise.all(promises) Promise.all(promises)
.then(results => resolve(Object.assign({}, ...results))) .then(results => resolve(Object.assign({}, ...results)))
@ -9325,7 +9337,7 @@ Bitcoin.Util = {
refreshAppData() { refreshAppData() {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
Promise.all([this.util.refreshObjectData(), this.util.refreshRequests(), this.util Promise.all([this.util.refreshObjectData(), this.util.refreshRequests(), this.util
.refreshInbox() .refreshInbox(), this.util.refreshNetUnitValues()
]) ])
.then(results => { .then(results => {
this.util.parseRequests(); this.util.parseRequests();
@ -9335,23 +9347,17 @@ Bitcoin.Util = {
}, },
viewInbox() { viewInbox() {
let inbox = floDapps.getNextGeneralData("directMessage", '0'); let inbox = floDapps.getNextGeneralData("directMessage", '0', {decrypt: true});
inbox.forEach(d => {
if ("secret" in d.message)
d.message = JSON.parse(floCrypto.decryptData(d.message, myPrivKey))
})
return inbox; return inbox;
}, },
sendDirectMessage(message, receiver, receiverPubKey = null) { sendDirectMessage(message, receiver, receiverPubKey = null) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
if (receiverPubKey) { if (receiverPubKey && floCrypto.getFloIDfromPubkeyHex(receiverPubKey) != receiver)
if (floCrypto.getFloIDfromPubkeyHex(receiverPubKey) != receiver)
return reject("receiver Public-key mismatch") return reject("receiver Public-key mismatch")
message = floCrypto.encryptData(JSON.stringify(message), receiverPubKey);
}
floCloudAPI.sendGeneralData(message, "directMessage", { floCloudAPI.sendGeneralData(message, "directMessage", {
receiverID: receiver receiverID: receiver,
encrypt: receiverPubKey
}) })
.then(result => resolve(result)) .then(result => resolve(result))
.catch(error => reject(error)) .catch(error => reject(error))
@ -9402,8 +9408,10 @@ Bitcoin.Util = {
openDeposit_2(processID, accountDetails) { openDeposit_2(processID, accountDetails) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
debugger;
this.banker.processRequest(processID).then(result => { this.banker.processRequest(processID).then(result => {
this.util.sendDirectMessage({ debugger;
this.sendDirectMessage({
processID, processID,
accountDetails accountDetails
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9416,7 +9424,7 @@ Bitcoin.Util = {
openDeposit_3(processID, paymentRef, bankerFloID, bankerPubKey) { openDeposit_3(processID, paymentRef, bankerFloID, bankerPubKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
paymentRef paymentRef
}, bankerFloID, bankerPubKey) }, bankerFloID, bankerPubKey)
@ -9430,7 +9438,7 @@ Bitcoin.Util = {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.openNewDeposit(r.requestor, r.amount, r.period, interest, paymentRefID) this.banker.openNewDeposit(r.requestor, r.amount, r.period, interest, paymentRefID)
.then(result => { .then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
status: "New Deposit Opened" status: "New Deposit Opened"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9457,7 +9465,7 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.processRequest(processID).then(result => { this.banker.processRequest(processID).then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
request: "paymentAccount" request: "paymentAccount"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9471,7 +9479,7 @@ Bitcoin.Util = {
closeDeposit_3(processID, accountDetails, bankerFloID, bankerPubKey) { closeDeposit_3(processID, accountDetails, bankerFloID, bankerPubKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
accountDetails accountDetails
}, bankerFloID, bankerPubKey) }, bankerFloID, bankerPubKey)
@ -9484,7 +9492,7 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.closeDeposit(r.requestor, r.index, paymentRef).then(result => { this.banker.closeDeposit(r.requestor, r.index, paymentRef).then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
text: "Deposit closed" text: "Deposit closed"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9511,7 +9519,7 @@ Bitcoin.Util = {
this.banker.processRequest(processID).then(result => { this.banker.processRequest(processID).then(result => {
this.util.checkCollateralEligibility(r.requestor, r.collateral, r.amount).then( this.util.checkCollateralEligibility(r.requestor, r.collateral, r.amount).then(
result => { result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
request: "paymentAccount" request: "paymentAccount"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9520,7 +9528,7 @@ Bitcoin.Util = {
)) ))
.catch(error => reject(error)) .catch(error => reject(error))
}).catch(error => { }).catch(error => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
text: `Loan not sanctioned: ${error}` text: `Loan not sanctioned: ${error}`
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9533,7 +9541,7 @@ Bitcoin.Util = {
openLoan_3(processID, accountDetails, bankerFloID, bankerPubKey) { openLoan_3(processID, accountDetails, bankerFloID, bankerPubKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
accountDetails accountDetails
}, bankerFloID, bankerPubKey) }, bankerFloID, bankerPubKey)
@ -9547,7 +9555,7 @@ Bitcoin.Util = {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.openNewLoan(r.requestor, r.amount, r.period, interest, r.collateral, paymentRef) this.banker.openNewLoan(r.requestor, r.amount, r.period, interest, r.collateral, paymentRef)
.then(result => { .then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
text: "Loan opened" text: "Loan opened"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9574,7 +9582,7 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.processRequest(processID).then(result => { this.banker.processRequest(processID).then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
accountDetails accountDetails
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9587,7 +9595,7 @@ Bitcoin.Util = {
closeLoan_3(processID, paymentRef, bankerFloID, bankerPubKey) { closeLoan_3(processID, paymentRef, bankerFloID, bankerPubKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
paymentRef paymentRef
}, bankerFloID, bankerPubKey) }, bankerFloID, bankerPubKey)
@ -9600,7 +9608,7 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.closeLoan(r.requestor, r.index, paymentRef).then(result => { this.banker.closeLoan(r.requestor, r.index, paymentRef).then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
text: "Deposit closed" text: "Deposit closed"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9628,7 +9636,7 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.processRequest(processID).then(result => { this.banker.processRequest(processID).then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
accountDetails accountDetails
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9641,7 +9649,7 @@ Bitcoin.Util = {
buyCollateral_3(processID, paymentRef, bankerFloID, bankerPubKey) { buyCollateral_3(processID, paymentRef, bankerFloID, bankerPubKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
paymentRef paymentRef
}, bankerFloID, bankerPubKey) }, bankerFloID, bankerPubKey)
@ -9656,7 +9664,7 @@ Bitcoin.Util = {
this.banker.openCollateral(r.requestor, paymentRefID, r.collateralType, units, details, this.banker.openCollateral(r.requestor, paymentRefID, r.collateralType, units, details,
comment) comment)
.then(result => { .then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
status: "Collateral brought" status: "Collateral brought"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9683,7 +9691,7 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.processRequest(processID).then(result => { this.banker.processRequest(processID).then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
request: "paymentAccount" request: "paymentAccount"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9697,7 +9705,7 @@ Bitcoin.Util = {
sellCollateral_3(processID, accountDetails, bankerFloID, bankerPubKey) { sellCollateral_3(processID, accountDetails, bankerFloID, bankerPubKey) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
accountDetails accountDetails
}, bankerFloID, bankerPubKey) }, bankerFloID, bankerPubKey)
@ -9710,7 +9718,7 @@ Bitcoin.Util = {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let r = this.util.requests[processID]; let r = this.util.requests[processID];
this.banker.closeCollateral(r.requestor, r.index, paymentRef).then(result => { this.banker.closeCollateral(r.requestor, r.index, paymentRef).then(result => {
this.util.sendDirectMessage({ this.sendDirectMessage({
processID, processID,
text: "Collateral sold" text: "Collateral sold"
}, r.requestor, r.pubKey) }, r.requestor, r.pubKey)
@ -9721,79 +9729,79 @@ Bitcoin.Util = {
}, },
checkCollateralEligibility(floID, collateralIndex, loanAmount) { checkCollateralEligibility(floID, collateralIndex, loanAmount) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let col; let col;
try { try {
col = floGlobals.appObjects["collaterals"][floID][collateralIndex]; col = floGlobals.appObjects["collaterals"][floID][collateralIndex];
} catch (error) { } catch (error) {
return reject("Account doesnot own any collateral") return reject("Account doesnot own any collateral")
} }
if (!col) if (!col)
return reject("Collateral Not Found!") return reject("Collateral Not Found!")
else if (col.status !== "ACTIVE") else if (col.status !== "ACTIVE")
return reject(`Collateral is not Active! (current status: ${col.status})`) return reject(`Collateral is not Active! (current status: ${col.status})`)
else if (col.loanRefs && col.loanRefs.length) { else if (col.loanRefs && col.loanRefs.length) {
let loans = col.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][ let loans = col.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][
i i
]) ])
let totalLoanAmt = 0 let totalLoanAmt = 0
loans.forEach(l => totalLoanAmt += l.amount) loans.forEach(l => totalLoanAmt += l.amount)
let netVal = this.util.unitValues[col.type]; let netVal = this.util.unitValues[col.type];
let loanThreshold = floGlobals.policy["loanRatio"] * col.units * netVal; let loanThreshold = floGlobals.settings["loanRatio"] * col.units * netVal;
if (totalLoanAmt >= loanThreshold) if (totalLoanAmt >= loanThreshold)
return reject("Collateral threshold already exceeded") return reject("Collateral threshold already exceeded")
let tmpAmt = loanAmount + totalLoanAmt; let tmpAmt = loanAmount + totalLoanAmt;
if (tmpAmt >= loanThreshold) if (tmpAmt >= loanThreshold)
return reject("Collateral doesnot have enough NET value") return reject("Collateral doesnot have enough NET value")
resolve("Collateral eligible for loan") resolve("Collateral eligible for loan")
} else } else
resolve("Collateral eligible for loan") resolve("Collateral eligible for loan")
}) })
}, },
isCollateralOverflow(floID, index) { isCollateralOverflow(floID, index) {
if (!col.loanRefs.length) if (!col.loanRefs.length)
return false return false
let col = floGlobals.appObjects["collaterals"][floID][index]; let col = floGlobals.appObjects["collaterals"][floID][index];
let loanThreshold = floGlobals.policy["loanRatio"] * col.units * this.util.unitValues[col.type]; let loanThreshold = floGlobals.settings["loanRatio"] * col.units * this.util.unitValues[col.type];
let loans = col.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][i]) let loans = col.loanRefs.map(i => floGlobals.appObjects.bank["loans"][floID][i])
let totalLoanAmt = 0; let totalLoanAmt = 0;
loans.forEach(l => totalLoanAmt += l.amount) loans.forEach(l => totalLoanAmt += l.amount)
if (totalLoanAmt >= loanThreshold) if (totalLoanAmt >= loanThreshold)
return true; return true;
else else
return false; return false;
}, },
viewCollateralOverflows(floIDs = null) { viewCollateralOverflows(floIDs = null) {
if (!floIDs) if (!floIDs)
floIDs = Object.keys(floGlobals.appObjects["collaterals"]) floIDs = Object.keys(floGlobals.appObjects["collaterals"])
else if (floCrypto.validateAddr(floIDs)) else if (floCrypto.validateAddr(floIDs))
floIDs = [floIDs] floIDs = [floIDs]
else if (!Array.isArray(floIDs)) else if (!Array.isArray(floIDs))
throw Error("Invalid parameters: Parameters must be floID or array of floIDs"); throw Error("Invalid parameters: Parameters must be floID or array of floIDs");
let overflows = {} let overflows = {}
floIDs.forEach(f => { floIDs.forEach(f => {
if (f in floGlobals.appObjects["collaterals"]) { if (f in floGlobals.appObjects["collaterals"]) {
overflows[f] = [] overflows[f] = []
for (let i in floGlobals.appObjects["collaterals"][f]) { for (let i in floGlobals.appObjects["collaterals"][f]) {
if (this.isCollateralOverflow(f, i)) if (this.isCollateralOverflow(f, i))
overflows[f].push(floGlobals.appObjects["collaterals"][f][i]) overflows[f].push(floGlobals.appObjects["collaterals"][f][i])
} }
if (!overflows[f].length) if (!overflows[f].length)
delete overflows[f] delete overflows[f]
} }
}) })
return overflows; return overflows;
}, },
//Banker only functions (subAdmins only) //Banker only functions (subAdmins only)
banker: { banker: {
processRequest(processID) { processRequest(processID) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
floCloudAPI.requestObjectData("process").then(result => { floCloudAPI.requestObjectData("bank").then(result => {
if (processID in floGlobals.appObjects.bank["process"]) if (processID in floGlobals.appObjects.bank["process"])
reject("Request already in process") reject("Request already in process")
else { else {