added currency, live status for cashiers and rule to select live cashiers for deposit requests
This commit is contained in:
parent
ad8a335d47
commit
d51afa90e6
@ -12016,7 +12016,6 @@
|
|||||||
// 03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6,
|
// 03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6,
|
||||||
// 03C8E3836C9A77E2AF03D4265D034BA85732738919708EAF6A16382195AE796EDF,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB,
|
// 03C8E3836C9A77E2AF03D4265D034BA85732738919708EAF6A16382195AE796EDF,0349B08AA1ABDCFFB6D78CD7C949665AD2FF065EA02B3C6C47A5E9592C9A1C6BCB,
|
||||||
// 026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
|
// 026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
|
||||||
// #!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"}
|
|
||||||
// #!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi",
|
// #!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi",
|
||||||
// "03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"}
|
// "03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"}
|
||||||
// #!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
// #!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
||||||
@ -12035,9 +12034,8 @@
|
|||||||
#!#miners_fee={"btc":0.0005, "flo":0.001}
|
#!#miners_fee={"btc":0.0005, "flo":0.001}
|
||||||
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
||||||
026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
|
026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
|
||||||
#!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"}
|
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":{"upi":"johnDoe@upi", "currencies":["INR"], "is_live":false},
|
||||||
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi",
|
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":{"upi":"janeDoe@upi", "currencies":["INR", "USD"], "is_live":false}}
|
||||||
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"}
|
|
||||||
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
||||||
"ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
|
"ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
|
||||||
return callback(text);
|
return callback(text);
|
||||||
@ -14188,6 +14186,27 @@
|
|||||||
showMessage(
|
showMessage(
|
||||||
`Connection successfull. Welocome to Local Bitcoin Plus Plus Cash Handling platform.`
|
`Connection successfull. Welocome to Local Bitcoin Plus Plus Cash Handling platform.`
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload
|
||||||
|
window.addEventListener('beforeunload', function (e) {
|
||||||
|
e.preventDefault();
|
||||||
|
delete e['returnValue'];
|
||||||
|
const RM_RPC = new localbitcoinplusplus.rpc;
|
||||||
|
|
||||||
|
for(let conns in localbitcoinplusplus.supernode_conns) {
|
||||||
|
let req_body = {
|
||||||
|
trader_flo_address:
|
||||||
|
localbitcoinplusplus.wallets.my_local_flo_address,
|
||||||
|
is_live: false,
|
||||||
|
receiver_flo_address: conns
|
||||||
|
}
|
||||||
|
const server_con = localbitcoinplusplus.supernode_conns[conns];
|
||||||
|
RM_RPC.send_rpc
|
||||||
|
.call(this, 'cashier_left', req_body)
|
||||||
|
.then(resp => doSend(server_con, resp));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
showMessage(
|
showMessage(
|
||||||
|
|||||||
291
index.html
291
index.html
@ -1002,10 +1002,9 @@
|
|||||||
btnLoading(btn, 'start')
|
btnLoading(btn, 'start')
|
||||||
|
|
||||||
const RM_TRADE = new localbitcoinplusplus.trade();
|
const RM_TRADE = new localbitcoinplusplus.trade();
|
||||||
RM_TRADE.sendTransaction(
|
RM_TRADE.sendMultipleInputsTransaction(
|
||||||
send_crypto_type,
|
send_crypto_type,
|
||||||
utxo_addr_input,
|
[utxo_addr_wif_input],
|
||||||
utxo_addr_wif_input,
|
|
||||||
receiver_address_input,
|
receiver_address_input,
|
||||||
receiving_crypto_amount_input,
|
receiving_crypto_amount_input,
|
||||||
utxo_addr_input,
|
utxo_addr_input,
|
||||||
@ -12623,9 +12622,8 @@
|
|||||||
#!#miners_fee={"btc":0.0005, "flo":0.001}
|
#!#miners_fee={"btc":0.0005, "flo":0.001}
|
||||||
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
||||||
026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
|
026FCC6CFF6EB3A39E54BEB6E13FC2F02C3A93F4767AA80E49E7E876443F95AE5F,
|
||||||
#!#externalFiles={"d3js":"58f54395efa8346e8e94d12609770f66b916897e7f4e05f6c98780cffa5c70a3"}
|
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":{"upi":"johnDoe@upi", "currencies":["INR"], "is_live":false},
|
||||||
#!#cashiers={"032871A74D2DDA9D0DE7135F58B5BD2D7F679D2CCA20EA7909466D1A6912DF4022":"johnDoe@upi",
|
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":{"upi":"janeDoe@upi", "currencies":["INR", "USD"], "is_live":false}}
|
||||||
"03DB4A12EB543B293DDBB0CE314C46C36D6761294AFBB7264A6D78F710FFD97CF0":"janeDoe@upi"}
|
|
||||||
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
#!#ShamirsMaxShares=8#!#supernodeSeeds={"ranchimall1":{"ip":"127.0.0.1:9111","kbucketId":"oZxHcbSf1JC8t5GjutopWYXs7C6Fe9p7ps"},
|
||||||
"ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
|
"ranchimall6":{"ip":"127.0.0.1:9116","kbucketId":"oV1wCeWca3VawbBTfUGKA7Vd368PATnKAx"}}`;
|
||||||
return callback(text);
|
return callback(text);
|
||||||
@ -13989,6 +13987,7 @@
|
|||||||
reactor.registerEvent("user_flo_keys_active");
|
reactor.registerEvent("user_flo_keys_active");
|
||||||
reactor.registerEvent("remove_extra_backup_connections");
|
reactor.registerEvent("remove_extra_backup_connections");
|
||||||
reactor.registerEvent("createClosestSupernodesObject");
|
reactor.registerEvent("createClosestSupernodesObject");
|
||||||
|
reactor.registerEvent("createCashierStatusObject");
|
||||||
reactor.registerEvent("informAllSuperNode");
|
reactor.registerEvent("informAllSuperNode");
|
||||||
reactor.registerEvent("informLeftSuperNode");
|
reactor.registerEvent("informLeftSuperNode");
|
||||||
reactor.registerEvent("informRightSuperNode");
|
reactor.registerEvent("informRightSuperNode");
|
||||||
@ -14788,14 +14787,14 @@
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
reactor.addEventListener('createClosestSupernodesObject', async function(getClosestSuList=[]) {
|
reactor.addEventListener('createClosestSupernodesObject', async function (getClosestSuList = []) {
|
||||||
|
|
||||||
if (typeof localbitcoinplusplus.myClosestSupernodes === "object"
|
if (typeof localbitcoinplusplus.myClosestSupernodes === "object"
|
||||||
&& localbitcoinplusplus.myClosestSupernodes.length ===
|
&& localbitcoinplusplus.myClosestSupernodes.length ===
|
||||||
localbitcoinplusplus.master_configurations.supernodesPubKeys.length)
|
localbitcoinplusplus.master_configurations.supernodesPubKeys.length)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if(typeof localbitcoinplusplus.myClosestSupernodes==="object") return;
|
if (typeof localbitcoinplusplus.myClosestSupernodes === "object") return;
|
||||||
|
|
||||||
const idbData = await readDB("localbitcoinUser", "00-01");
|
const idbData = await readDB("localbitcoinUser", "00-01");
|
||||||
|
|
||||||
@ -14837,10 +14836,58 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return localbitcoinplusplus.myClosestSupernodes;
|
||||||
|
});
|
||||||
|
|
||||||
return localbitcoinplusplus.myClosestSupernodes;
|
reactor.addEventListener('createCashierStatusObject', async function () {
|
||||||
|
|
||||||
|
if (typeof localbitcoinplusplus.CashierStatusObject === "object"
|
||||||
|
&& localbitcoinplusplus.CashierStatusObject.length ===
|
||||||
|
localbitcoinplusplus.master_configurations.cashiers.length)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (typeof localbitcoinplusplus.CashierStatusObject === "object") return;
|
||||||
|
|
||||||
|
const cashiers_list = JSON.parse(localbitcoinplusplus.master_configurations.cashiers);
|
||||||
|
|
||||||
|
Object.defineProperty(localbitcoinplusplus, 'CashierStatusObject', {
|
||||||
|
value: {},
|
||||||
|
writable: false,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: false
|
||||||
});
|
});
|
||||||
|
|
||||||
|
for (let cashier_pubkey in cashiers_list) {
|
||||||
|
for (let vals in cashiers_list[cashier_pubkey]) {
|
||||||
|
if (typeof localbitcoinplusplus.CashierStatusObject[cashier_pubkey] !== "object") {
|
||||||
|
Object.defineProperty(localbitcoinplusplus.CashierStatusObject, [cashier_pubkey], {
|
||||||
|
value: {},
|
||||||
|
writable: false,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if (vals === 'is_live') {
|
||||||
|
Object.defineProperty(localbitcoinplusplus.CashierStatusObject[cashier_pubkey], vals, {
|
||||||
|
value: cashiers_list[cashier_pubkey][vals],
|
||||||
|
writable: true,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: false
|
||||||
|
});
|
||||||
|
|
||||||
|
} else {
|
||||||
|
Object.defineProperty(localbitcoinplusplus.CashierStatusObject[cashier_pubkey], vals, {
|
||||||
|
value: cashiers_list[cashier_pubkey][vals],
|
||||||
|
writable: false,
|
||||||
|
enumerable: true,
|
||||||
|
configurable: false
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return localbitcoinplusplus.CashierStatusObject;
|
||||||
|
});
|
||||||
|
|
||||||
/* Function to notify all Supernodes of a particuat event (may or may not releated to a subject flo id) */
|
/* Function to notify all Supernodes of a particuat event (may or may not releated to a subject flo id) */
|
||||||
reactor.addEventListener("informAllSuperNode", function(msg_obj={}) {
|
reactor.addEventListener("informAllSuperNode", function(msg_obj={}) {
|
||||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
@ -16690,11 +16737,14 @@
|
|||||||
receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
|
receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const cashiersList = JSON.parse(
|
let cashiersList = Object.keys(localbitcoinplusplus.CashierStatusObject)
|
||||||
localbitcoinplusplus.master_configurations.cashiers
|
.filter(f=>localbitcoinplusplus.CashierStatusObject[f].currencies.includes(params.currency));
|
||||||
);
|
if(cashiersList.length<1) throw new Error('Unknown currency requested. No cashier found.');
|
||||||
const cashiersPubKeysArray = Object.keys(cashiersList);
|
let liveCashiersList = cashiersList.filter(f=>localbitcoinplusplus.CashierStatusObject[f].is_live===true);
|
||||||
const getAPaymentHandler = randomNoRepeats(cashiersPubKeysArray)();
|
if(liveCashiersList.length>0) {
|
||||||
|
cashiersList = liveCashiersList;
|
||||||
|
}
|
||||||
|
const getAPaymentHandler = randomNoRepeats(cashiersList)();
|
||||||
|
|
||||||
if (!cashiersPubKeysArray.includes(
|
if (!cashiersPubKeysArray.includes(
|
||||||
getAPaymentHandler
|
getAPaymentHandler
|
||||||
@ -16710,7 +16760,7 @@
|
|||||||
throw new Error(err_msg);
|
throw new Error(err_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
receivedTradeInfo.cashier_upi = cashiersList[getAPaymentHandler];
|
receivedTradeInfo.cashier_upi = cashiersList[getAPaymentHandler].upi;
|
||||||
receivedTradeInfo.cashier_pubKey = getAPaymentHandler;
|
receivedTradeInfo.cashier_pubKey = getAPaymentHandler;
|
||||||
const receivedTradeInfoResp = await addDB(
|
const receivedTradeInfoResp = await addDB(
|
||||||
"cash_deposits",
|
"cash_deposits",
|
||||||
@ -18401,16 +18451,18 @@
|
|||||||
receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
|
receivedTradeInfo["order_validator_public_key"] = su_data.myLocalFLOPublicKey;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const cashiersList = JSON.parse(
|
let cashiersList = Object.keys(localbitcoinplusplus.CashierStatusObject)
|
||||||
localbitcoinplusplus.master_configurations.cashiers
|
.filter(f=>localbitcoinplusplus.CashierStatusObject[f].currencies.includes(params.currency));
|
||||||
);
|
if(cashiersList.length<1) throw new Error('Unknown currency requested. No cashier found.');
|
||||||
const cashiersPubKeysArray = Object.keys(cashiersList);
|
let liveCashiersList = cashiersList.filter(f=>localbitcoinplusplus.CashierStatusObject[f].is_live===true);
|
||||||
const getAPaymentHandler = randomNoRepeats(cashiersPubKeysArray)();
|
if(liveCashiersList.length>0) {
|
||||||
|
cashiersList = liveCashiersList;
|
||||||
|
}
|
||||||
|
const getAPaymentHandler = randomNoRepeats(cashiersList)();
|
||||||
|
|
||||||
if (!cashiersPubKeysArray.includes(
|
if (!cashiersPubKeysArray.includes(
|
||||||
getAPaymentHandler
|
getAPaymentHandler
|
||||||
)
|
)) {
|
||||||
) {
|
|
||||||
err_msg = `ERROR: ${getAPaymentHandler} is not recognized as any Cashier's Public Key.`;
|
err_msg = `ERROR: ${getAPaymentHandler} is not recognized as any Cashier's Public Key.`;
|
||||||
err_response = {
|
err_response = {
|
||||||
user_flo_addr: params.trader_flo_address,
|
user_flo_addr: params.trader_flo_address,
|
||||||
@ -18421,7 +18473,7 @@
|
|||||||
throw new Error(err_msg);
|
throw new Error(err_msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
receivedTradeInfo.cashier_upi = cashiersList[getAPaymentHandler];
|
receivedTradeInfo.cashier_upi = cashiersList[getAPaymentHandler].upi;
|
||||||
receivedTradeInfo.cashier_pubKey = getAPaymentHandler;
|
receivedTradeInfo.cashier_pubKey = getAPaymentHandler;
|
||||||
const receivedTradeInfoResp = await backup_server_db_instance
|
const receivedTradeInfoResp = await backup_server_db_instance
|
||||||
.backup_addDB("cash_deposits", receivedTradeInfo);
|
.backup_addDB("cash_deposits", receivedTradeInfo);
|
||||||
@ -18455,7 +18507,7 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
|
console.error(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -18866,7 +18918,7 @@
|
|||||||
|
|
||||||
try {
|
try {
|
||||||
// Transfer Token
|
// Transfer Token
|
||||||
RM_TRADE.sendTransaction(
|
RM_TRADE.sendMultipleInputsTransaction(
|
||||||
localbitcoinplusplus.BASE_BLOCKCHAIN,
|
localbitcoinplusplus.BASE_BLOCKCHAIN,
|
||||||
[localbitcoinplusplus.wallets
|
[localbitcoinplusplus.wallets
|
||||||
.MY_SUPERNODE_PRIVATE_KEY],
|
.MY_SUPERNODE_PRIVATE_KEY],
|
||||||
@ -20641,173 +20693,6 @@
|
|||||||
`current_${crypto_code}_price_in_${currency_code}`
|
`current_${crypto_code}_price_in_${currency_code}`
|
||||||
];
|
];
|
||||||
},
|
},
|
||||||
sendTransaction(
|
|
||||||
crypto_type,
|
|
||||||
utxo_addr,
|
|
||||||
utxo_addr_wif,
|
|
||||||
receiver_address,
|
|
||||||
receiving_amount,
|
|
||||||
change_adress,
|
|
||||||
callback,
|
|
||||||
custom_floData = ""
|
|
||||||
) {
|
|
||||||
let blockchain_explorer;
|
|
||||||
let miners_fee = 0.0003;
|
|
||||||
const miner_fee_obj = JSON.parse(
|
|
||||||
localbitcoinplusplus.master_configurations.miners_fee
|
|
||||||
);
|
|
||||||
if (crypto_type == "BTC") {
|
|
||||||
blockchain_explorer = localbitcoinplusplus.server.btc_mainnet;
|
|
||||||
miners_fee = miner_fee_obj.btc;
|
|
||||||
} else if (crypto_type == "BTC_TEST") {
|
|
||||||
blockchain_explorer = localbitcoinplusplus.server.btc_testnet;
|
|
||||||
miners_fee = miner_fee_obj.btc;
|
|
||||||
} else if (crypto_type == "FLO") {
|
|
||||||
blockchain_explorer = localbitcoinplusplus.server.flo_mainnet;
|
|
||||||
miners_fee = miner_fee_obj.flo;
|
|
||||||
} else if (crypto_type == "FLO_TEST") {
|
|
||||||
blockchain_explorer = localbitcoinplusplus.server.flo_testnet;
|
|
||||||
miners_fee = miner_fee_obj.flo;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof blockchain_explorer !== "string") {
|
|
||||||
showMessage(
|
|
||||||
`WARNING: Please select cryptocurrency/fiat value from select bar.`
|
|
||||||
);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
let url = `${blockchain_explorer}/api/addr/${utxo_addr}/utxo`;
|
|
||||||
console.log(url);
|
|
||||||
let err_msg;
|
|
||||||
|
|
||||||
helper_functions
|
|
||||||
.ajaxGet(url)
|
|
||||||
.then(utxo_list => {
|
|
||||||
if (utxo_list.length > 0) {
|
|
||||||
try {
|
|
||||||
utxo_list.sort((a,b)=>b.confirmations - a.confirmations);
|
|
||||||
let btc_eq_receiving_amount = helper_functions.truncateDecimals(receiving_amount);
|
|
||||||
|
|
||||||
let trx = bitjs[crypto_type].transaction();
|
|
||||||
let sum = 0;
|
|
||||||
let signing_private_keys_array = [];
|
|
||||||
|
|
||||||
for (var key in utxo_list) {
|
|
||||||
if (utxo_list[key].confirmations > 0) {
|
|
||||||
var obj = utxo_list[key];
|
|
||||||
sum += obj.amount;
|
|
||||||
|
|
||||||
let signingPk = utxo_addr_wif
|
|
||||||
.filter(pk=>RM_WALLET.generateFloKeys(pk).address===obj.address);
|
|
||||||
|
|
||||||
if(typeof signingPk[0]=="string") {
|
|
||||||
signing_private_keys_array.push(signingPk[0]);
|
|
||||||
} else continue;
|
|
||||||
|
|
||||||
if (btc_eq_receiving_amount <= sum) {
|
|
||||||
trx.addinput(obj.txid, obj.vout, obj.scriptPubKey);
|
|
||||||
break;
|
|
||||||
} else {
|
|
||||||
trx.addinput(obj.txid, obj.vout, obj.scriptPubKey);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (sum <= 0) {
|
|
||||||
console.log(utxo_list);
|
|
||||||
throw new Error("ERROR: No amount found in UTXO.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// Output cannot be greater than input
|
|
||||||
if (sum < btc_eq_receiving_amount) {
|
|
||||||
btc_eq_receiving_amount = sum;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (btc_eq_receiving_amount - miners_fee <= 0)
|
|
||||||
throw new Error(
|
|
||||||
`Error: btc_eq_receiving_amount cannot be less than miners_fee.`
|
|
||||||
);
|
|
||||||
|
|
||||||
btc_eq_receiving_amount =
|
|
||||||
btc_eq_receiving_amount - miners_fee;
|
|
||||||
btc_eq_receiving_amount = helper_functions.truncateDecimals(
|
|
||||||
btc_eq_receiving_amount
|
|
||||||
);
|
|
||||||
trx.addoutput(receiver_address, btc_eq_receiving_amount);
|
|
||||||
|
|
||||||
let change_amount = 0;
|
|
||||||
if (sum - btc_eq_receiving_amount - miners_fee > 0) {
|
|
||||||
change_amount = sum - btc_eq_receiving_amount - miners_fee;
|
|
||||||
change_amount = helper_functions.truncateDecimals(change_amount);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (change_amount > 0) {
|
|
||||||
trx.addoutput(change_adress, change_amount);
|
|
||||||
}
|
|
||||||
var sendFloData = `localbitcoinpluslus tx: Send ${btc_eq_receiving_amount} ${crypto_type} to ${receiver_address}.`; //flochange adding place for flodata -- need a validation of 1024 chars
|
|
||||||
if (custom_floData.length > 0) {
|
|
||||||
sendFloData = custom_floData;
|
|
||||||
}
|
|
||||||
if (crypto_type == "FLO" || crypto_type == "FLO_TEST") {
|
|
||||||
trx.addflodata(sendFloData); // flochange .. create this function
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
console.log(trx);
|
|
||||||
|
|
||||||
let signedTxHash = trx.sign(signing_private_keys_array, 1); //SIGHASH_ALL DEFAULT 1
|
|
||||||
console.log(signedTxHash);
|
|
||||||
|
|
||||||
var http = new XMLHttpRequest();
|
|
||||||
var tx_send_url = `${blockchain_explorer}/api/tx/send`;
|
|
||||||
var params = `{"rawtx":"${signedTxHash}"}`;
|
|
||||||
http.open("POST", tx_send_url, true);
|
|
||||||
http.setRequestHeader("Content-type", "application/json");
|
|
||||||
http.onreadystatechange = function() {
|
|
||||||
//Call a function when the state changes.
|
|
||||||
if (http.readyState == 4) {
|
|
||||||
if (http.status == 200) {
|
|
||||||
console.log(http.responseText);
|
|
||||||
let response_obj = {
|
|
||||||
signedTxHash: signedTxHash,
|
|
||||||
txid: http.responseText
|
|
||||||
};
|
|
||||||
//callback(http.responseText);
|
|
||||||
callback(response_obj);
|
|
||||||
} else {
|
|
||||||
let response_obj = {
|
|
||||||
signedTxHash: signedTxHash,
|
|
||||||
txid: ""
|
|
||||||
};
|
|
||||||
callback(response_obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
http.onerror = function() {
|
|
||||||
let response_obj = {
|
|
||||||
signedTxHash: signedTxHash,
|
|
||||||
txid: ""
|
|
||||||
};
|
|
||||||
callback(response_obj);
|
|
||||||
};
|
|
||||||
http.send(params);
|
|
||||||
} catch (error) {
|
|
||||||
showMessage(error);
|
|
||||||
throw new Error(error);
|
|
||||||
}
|
|
||||||
} catch (error) {
|
|
||||||
throw new Error(error);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.catch(e =>
|
|
||||||
console.error(
|
|
||||||
`ERROR: Failed to send tx from utxo ${utxo_addr}: ${e}`
|
|
||||||
)
|
|
||||||
);
|
|
||||||
},
|
|
||||||
|
|
||||||
// Send transaction for multiple inputs and outputs
|
// Send transaction for multiple inputs and outputs
|
||||||
sendMultipleInputsTransaction(
|
sendMultipleInputsTransaction(
|
||||||
crypto_type,
|
crypto_type,
|
||||||
@ -20838,7 +20723,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (typeof blockchain_explorer !== "string") {
|
if (typeof blockchain_explorer !== "string") {
|
||||||
showMessage(
|
notify(
|
||||||
`WARNING: Please select cryptocurrency/fiat value from select bar.`
|
`WARNING: Please select cryptocurrency/fiat value from select bar.`
|
||||||
);
|
);
|
||||||
return false;
|
return false;
|
||||||
@ -20860,7 +20745,7 @@
|
|||||||
try {
|
try {
|
||||||
const utxo_list = [].concat(...all_utxos);
|
const utxo_list = [].concat(...all_utxos);
|
||||||
utxo_list.sort((a, b) => b.confirmations - a.confirmations);
|
utxo_list.sort((a, b) => b.confirmations - a.confirmations);
|
||||||
let btc_eq_receiving_amount = helper_functions.truncateDecimals(receiving_amount);
|
let btc_eq_receiving_amount = receiving_amount;
|
||||||
|
|
||||||
let trx = bitjs[crypto_type].transaction();
|
let trx = bitjs[crypto_type].transaction();
|
||||||
let sum = 0;
|
let sum = 0;
|
||||||
@ -20876,7 +20761,7 @@
|
|||||||
if(typeof signingPk[0]=="string") {
|
if(typeof signingPk[0]=="string") {
|
||||||
signing_private_keys_array.push(signingPk[0]);
|
signing_private_keys_array.push(signingPk[0]);
|
||||||
} else continue;
|
} else continue;
|
||||||
sum += helper_functions.truncateDecimals(obj.amount);
|
sum += obj.amount;
|
||||||
|
|
||||||
if (btc_eq_receiving_amount <= sum) {
|
if (btc_eq_receiving_amount <= sum) {
|
||||||
trx.addinput(obj.txid, obj.vout, obj.scriptPubKey);
|
trx.addinput(obj.txid, obj.vout, obj.scriptPubKey);
|
||||||
@ -20902,18 +20787,21 @@
|
|||||||
`Error: btc_eq_receiving_amount cannot be less than miners_fee.`
|
`Error: btc_eq_receiving_amount cannot be less than miners_fee.`
|
||||||
);
|
);
|
||||||
|
|
||||||
btc_eq_receiving_amount = helper_functions.truncateDecimals(
|
btc_eq_receiving_amount = btc_eq_receiving_amount - miners_fee;
|
||||||
btc_eq_receiving_amount - miners_fee);
|
|
||||||
|
|
||||||
trx.addoutput(receiver_address, btc_eq_receiving_amount);
|
trx.addoutput(receiver_address, btc_eq_receiving_amount);
|
||||||
|
|
||||||
let change_amount = 0;
|
let change_amount = 0;
|
||||||
if (sum - btc_eq_receiving_amount - miners_fee > 0) {
|
if (sum - btc_eq_receiving_amount - miners_fee > 0) {
|
||||||
change_amount = sum - btc_eq_receiving_amount - miners_fee;
|
change_amount = sum - btc_eq_receiving_amount - miners_fee;
|
||||||
change_amount = helper_functions.truncateDecimals(change_amount);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (change_amount > 0) {
|
if (change_amount > 0) {
|
||||||
|
if(typeof change_adress !== "string"
|
||||||
|
|| change_adress.length<1) {
|
||||||
|
let change_adress_keygen = RM_WALLET.generateFloKeys(utxo_addr_wif[0]);
|
||||||
|
change_adress = change_adress_keygen.address;
|
||||||
|
}
|
||||||
trx.addoutput(change_adress, change_amount);
|
trx.addoutput(change_adress, change_amount);
|
||||||
}
|
}
|
||||||
var sendFloData = `localbitcoinpluslus tx: Send ${btc_eq_receiving_amount} ${crypto_type} to ${receiver_address}.`; //flochange adding place for flodata -- need a validation of 1024 chars
|
var sendFloData = `localbitcoinpluslus tx: Send ${btc_eq_receiving_amount} ${crypto_type} to ${receiver_address}.`; //flochange adding place for flodata -- need a validation of 1024 chars
|
||||||
@ -20936,7 +20824,6 @@
|
|||||||
http.open("POST", tx_send_url, true);
|
http.open("POST", tx_send_url, true);
|
||||||
http.setRequestHeader("Content-type", "application/json");
|
http.setRequestHeader("Content-type", "application/json");
|
||||||
http.onreadystatechange = function () {
|
http.onreadystatechange = function () {
|
||||||
//Call a function when the state changes.
|
|
||||||
if (http.readyState == 4) {
|
if (http.readyState == 4) {
|
||||||
if (http.status == 200) {
|
if (http.status == 200) {
|
||||||
console.log(http.responseText);
|
console.log(http.responseText);
|
||||||
@ -20944,7 +20831,6 @@
|
|||||||
signedTxHash: signedTxHash,
|
signedTxHash: signedTxHash,
|
||||||
txid: http.responseText
|
txid: http.responseText
|
||||||
};
|
};
|
||||||
//callback(http.responseText);
|
|
||||||
callback(response_obj);
|
callback(response_obj);
|
||||||
} else {
|
} else {
|
||||||
let response_obj = {
|
let response_obj = {
|
||||||
@ -21945,6 +21831,7 @@
|
|||||||
const getClosestSuList = await readAllDB("myClosestSupernodes");
|
const getClosestSuList = await readAllDB("myClosestSupernodes");
|
||||||
|
|
||||||
reactor.dispatchEvent("createClosestSupernodesObject", getClosestSuList);
|
reactor.dispatchEvent("createClosestSupernodesObject", getClosestSuList);
|
||||||
|
reactor.dispatchEvent("createCashierStatusObject", getClosestSuList);
|
||||||
|
|
||||||
if (
|
if (
|
||||||
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
|
localbitcoinplusplus.master_configurations.supernodesPubKeys.includes(
|
||||||
@ -27911,6 +27798,7 @@
|
|||||||
);
|
);
|
||||||
|
|
||||||
if (typeof res_obj.method !== "undefined") {
|
if (typeof res_obj.method !== "undefined") {
|
||||||
|
localbitcoinplusplus.CashierStatusObject[res_obj.nodePubKey].is_live=true;
|
||||||
let response_from_sever;
|
let response_from_sever;
|
||||||
|
|
||||||
const RM_WALLET = new localbitcoinplusplus.wallets();
|
const RM_WALLET = new localbitcoinplusplus.wallets();
|
||||||
@ -27941,6 +27829,9 @@
|
|||||||
JSON.stringify(res_obj)
|
JSON.stringify(res_obj)
|
||||||
);
|
);
|
||||||
break;
|
break;
|
||||||
|
case "cashier_left":
|
||||||
|
localbitcoinplusplus.CashierStatusObject[res_obj.nodePubKey].is_live=false;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user