Background process for close-fund
This commit is contained in:
parent
8a82a0b675
commit
d3f08dd921
@ -2,6 +2,7 @@
|
|||||||
const blockchain = require('./blockchain');
|
const blockchain = require('./blockchain');
|
||||||
const conversion_rates = require('./services/conversion').getRate;
|
const conversion_rates = require('./services/conversion').getRate;
|
||||||
const bond_util = require('./services/bonds').util;
|
const bond_util = require('./services/bonds').util;
|
||||||
|
const fund_util = require('./services/bobs-fund').util;
|
||||||
|
|
||||||
const {
|
const {
|
||||||
LAUNCH_SELLER_TAG,
|
LAUNCH_SELLER_TAG,
|
||||||
@ -186,6 +187,8 @@ function confirmWithdrawalToken() {
|
|||||||
DB.query("SELECT id, floID, token, amount, txid FROM WithdrawToken WHERE status=?", ["WAITING_CONFIRMATION"]).then(results => {
|
DB.query("SELECT id, floID, token, amount, txid FROM WithdrawToken WHERE status=?", ["WAITING_CONFIRMATION"]).then(results => {
|
||||||
results.forEach(r => {
|
results.forEach(r => {
|
||||||
floTokenAPI.getTx(r.txid).then(tx => {
|
floTokenAPI.getTx(r.txid).then(tx => {
|
||||||
|
if (!tx.transactionDetails.blockheight || !tx.transactionDetails.confirmations) //Still not confirmed
|
||||||
|
return;
|
||||||
DB.query("UPDATE WithdrawToken SET status=? WHERE id=?", ["SUCCESS", r.id])
|
DB.query("UPDATE WithdrawToken SET status=? WHERE id=?", ["SUCCESS", r.id])
|
||||||
.then(result => console.debug("Token withdrawed:", r.floID, r.token, r.amount))
|
.then(result => console.debug("Token withdrawed:", r.floID, r.token, r.amount))
|
||||||
.catch(error => console.error(error));
|
.catch(error => console.error(error));
|
||||||
@ -270,6 +273,8 @@ function confirmConvert() {
|
|||||||
}).catch(error => console.error(error));
|
}).catch(error => console.error(error));
|
||||||
else if (mode == _sql.CONVERT_MODE_PUT)
|
else if (mode == _sql.CONVERT_MODE_PUT)
|
||||||
floTokenAPI.getTx(r.out_txid).then(tx => {
|
floTokenAPI.getTx(r.out_txid).then(tx => {
|
||||||
|
if (!tx.transactionDetails.blockheight || !tx.transactionDetails.confirmations) //Still not confirmed
|
||||||
|
return;
|
||||||
DB.query("UPDATE DirectConvert SET status=? WHERE id=?", ["SUCCESS", r.id])
|
DB.query("UPDATE DirectConvert SET status=? WHERE id=?", ["SUCCESS", r.id])
|
||||||
.then(result => console.debug(`${r.floID} converted ${r.quantity} BTC to ${amount}`))
|
.then(result => console.debug(`${r.floID} converted ${r.quantity} BTC to ${amount}`))
|
||||||
.catch(error => console.error(error));
|
.catch(error => console.error(error));
|
||||||
@ -288,6 +293,8 @@ function confirmBondClosing() {
|
|||||||
DB.query("SELECT * FROM CloseBondTransact WHERE status=?", ["WAITING_CONFIRMATION"]).then(result => {
|
DB.query("SELECT * FROM CloseBondTransact WHERE status=?", ["WAITING_CONFIRMATION"]).then(result => {
|
||||||
results.forEach(r => {
|
results.forEach(r => {
|
||||||
floTokenAPI.getTx(r.txid).then(tx => {
|
floTokenAPI.getTx(r.txid).then(tx => {
|
||||||
|
if (!tx.transactionDetails.blockheight || !tx.transactionDetails.confirmations) //Still not confirmed
|
||||||
|
return;
|
||||||
let closeBondString = bond_util.stringify.end(r.bond_id, r.end_date, r.btc_net, r.usd_net, r.amount, r.ref_sign, r.txid);
|
let closeBondString = bond_util.stringify.end(r.bond_id, r.end_date, r.btc_net, r.usd_net, r.amount, r.ref_sign, r.txid);
|
||||||
floBlockchainAPI.writeData(global.myFloID, closeBondString, global.myPrivKey, bond_util.config.adminID).then(txid => {
|
floBlockchainAPI.writeData(global.myFloID, closeBondString, global.myPrivKey, bond_util.config.adminID).then(txid => {
|
||||||
DB.query("UPDATE CloseBondTransact SET status=?, close_id=? WHERE id=?", ["SUCCESS", txid, r.id])
|
DB.query("UPDATE CloseBondTransact SET status=?, close_id=? WHERE id=?", ["SUCCESS", txid, r.id])
|
||||||
@ -296,7 +303,30 @@ function confirmBondClosing() {
|
|||||||
}).catch(error => console.error(error))
|
}).catch(error => console.error(error))
|
||||||
}).catch(error => console.error(error));
|
}).catch(error => console.error(error));
|
||||||
})
|
})
|
||||||
}).catch(error => reject(error))
|
}).catch(error => console.error(error))
|
||||||
|
}
|
||||||
|
|
||||||
|
function retryFundClosing() {
|
||||||
|
DB.query("SELECT id, floID, amount FROM CloseFundTransact WHERE status=?", ["PENDING"]).then(results => {
|
||||||
|
results.forEach(r => blockchain.fundTransact.retry(r.floID, r.amount, r.id))
|
||||||
|
}).catch(error => console.error(error))
|
||||||
|
}
|
||||||
|
|
||||||
|
function confirmFundClosing() {
|
||||||
|
DB.query("SELECT * FROM CloseFundTransact WHERE status=?", ["WAITING_CONFIRMATION"]).then(result => {
|
||||||
|
results.forEach(r => {
|
||||||
|
floTokenAPI.getTx(r.txid).then(tx => {
|
||||||
|
if (!tx.transactionDetails.blockheight || !tx.transactionDetails.confirmations) //Still not confirmed
|
||||||
|
return;
|
||||||
|
let closeFundString = fund_util.stringify.end(r.fund_id, r.floID, r.end_date, r.btc_net, r.usd_net, r.amount, r.ref_sign, r.txid);
|
||||||
|
floBlockchainAPI.writeData(global.myFloID, closeFundString, global.myPrivKey, fund_util.config.adminID).then(txid => {
|
||||||
|
DB.query("UPDATE CloseFundTransact SET status=?, close_id=? WHERE id=?", ["SUCCESS", txid, r.id])
|
||||||
|
.then(result => console.debug("Fund investment closed:", r.fund_id))
|
||||||
|
.catch(error => console.error(error));
|
||||||
|
}).catch(error => console.error(error))
|
||||||
|
}).catch(error => console.error(error));
|
||||||
|
})
|
||||||
|
}).catch(error => console.error(error))
|
||||||
}
|
}
|
||||||
|
|
||||||
function processAll() {
|
function processAll() {
|
||||||
@ -312,6 +342,8 @@ function processAll() {
|
|||||||
confirmConvert();
|
confirmConvert();
|
||||||
retryBondClosing();
|
retryBondClosing();
|
||||||
confirmBondClosing();
|
confirmBondClosing();
|
||||||
|
retryFundClosing();
|
||||||
|
confirmFundClosing();
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
|
|||||||
@ -7,7 +7,8 @@ var DB; //container for database
|
|||||||
const TYPE_TOKEN = "TOKEN",
|
const TYPE_TOKEN = "TOKEN",
|
||||||
TYPE_COIN = "COIN",
|
TYPE_COIN = "COIN",
|
||||||
TYPE_CONVERT = "CONVERT",
|
TYPE_CONVERT = "CONVERT",
|
||||||
TYPE_BOND = "BOND";
|
TYPE_BOND = "BOND",
|
||||||
|
TYPE_FUND = "BOB-FUND";
|
||||||
|
|
||||||
const balance_locked = {},
|
const balance_locked = {},
|
||||||
balance_cache = {},
|
balance_cache = {},
|
||||||
@ -15,7 +16,8 @@ const balance_locked = {},
|
|||||||
[TYPE_COIN]: {},
|
[TYPE_COIN]: {},
|
||||||
[TYPE_TOKEN]: {},
|
[TYPE_TOKEN]: {},
|
||||||
[TYPE_CONVERT]: {},
|
[TYPE_CONVERT]: {},
|
||||||
[TYPE_BOND]: {}
|
[TYPE_BOND]: {},
|
||||||
|
[TYPE_FUND]: {}
|
||||||
};
|
};
|
||||||
|
|
||||||
function getBalance(sinkID, asset) {
|
function getBalance(sinkID, asset) {
|
||||||
@ -61,7 +63,8 @@ const WITHDRAWAL_MESSAGE = {
|
|||||||
[TYPE_COIN]: "(withdrawal from market)",
|
[TYPE_COIN]: "(withdrawal from market)",
|
||||||
[TYPE_TOKEN]: "(withdrawal from market)",
|
[TYPE_TOKEN]: "(withdrawal from market)",
|
||||||
[TYPE_CONVERT]: "(convert coin)",
|
[TYPE_CONVERT]: "(convert coin)",
|
||||||
[TYPE_BOND]: "(bond closing)"
|
[TYPE_BOND]: "(bond closing)",
|
||||||
|
[TYPE_FUND]: "(fund investment closing)"
|
||||||
}
|
}
|
||||||
|
|
||||||
function sendTx(floID, asset, quantity, sinkID, sinkKey, message) {
|
function sendTx(floID, asset, quantity, sinkID, sinkKey, message) {
|
||||||
@ -81,7 +84,8 @@ const updateSyntax = {
|
|||||||
[TYPE_COIN]: "UPDATE WithdrawCoin SET status=?, txid=? WHERE id=?",
|
[TYPE_COIN]: "UPDATE WithdrawCoin SET status=?, txid=? WHERE id=?",
|
||||||
[TYPE_TOKEN]: "UPDATE WithdrawToken SET status=?, txid=? WHERE id=?",
|
[TYPE_TOKEN]: "UPDATE WithdrawToken SET status=?, txid=? WHERE id=?",
|
||||||
[TYPE_CONVERT]: "UPDATE DirectConvert SET status=?, out_txid=? WHERE id=?",
|
[TYPE_CONVERT]: "UPDATE DirectConvert SET status=?, out_txid=? WHERE id=?",
|
||||||
[TYPE_BOND]: "UPDATE CloseBondTransact SET status=?, txid=? WHERE id=?"
|
[TYPE_BOND]: "UPDATE CloseBondTransact SET status=?, txid=? WHERE id=?",
|
||||||
|
[TYPE_FUND]: "UPDATE CloseFundTransact SET status=?, txid=? WHERE id=?"
|
||||||
};
|
};
|
||||||
|
|
||||||
function sendAsset(floID, asset, quantity, type, id) {
|
function sendAsset(floID, asset, quantity, type, id) {
|
||||||
@ -161,6 +165,12 @@ function bondTransact_retry(floID, amount, id) {
|
|||||||
else sendAsset(floID, floGlobals.currency, amount, TYPE_BOND, id);
|
else sendAsset(floID, floGlobals.currency, amount, TYPE_BOND, id);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function fundTransact_retry(floID, amount, id) {
|
||||||
|
if (id in callbackCollection[TYPE_FUND])
|
||||||
|
console.debug("A callback is already pending for this Fund investment closing");
|
||||||
|
else sendAsset(floID, floGlobals.currency, amount, TYPE_FUND, id);
|
||||||
|
}
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
set collectAndCall(fn) {
|
set collectAndCall(fn) {
|
||||||
collectAndCall = fn;
|
collectAndCall = fn;
|
||||||
@ -190,6 +200,9 @@ module.exports = {
|
|||||||
bondTransact: {
|
bondTransact: {
|
||||||
retry: bondTransact_retry
|
retry: bondTransact_retry
|
||||||
},
|
},
|
||||||
|
fundTransact: {
|
||||||
|
retry: fundTransact_retry
|
||||||
|
},
|
||||||
set DB(db) {
|
set DB(db) {
|
||||||
DB = db;
|
DB = db;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user