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