modified primary or backup syncing to be based on vector clock
This commit is contained in:
parent
4b601ceec6
commit
43b04bbe1d
@ -10071,7 +10071,7 @@
|
|||||||
RMAssets =
|
RMAssets =
|
||||||
`masterFLOPubKey=029EF7838D4D103E62262394B5417E8ABFD75539D19E61CA5FD0C2051B69B29910
|
`masterFLOPubKey=029EF7838D4D103E62262394B5417E8ABFD75539D19E61CA5FD0C2051B69B29910
|
||||||
#!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,BTC,FLO,BTC_TEST,FLO_TEST,
|
#!#tradableAsset1=BTC,FLO,BTC_TEST,FLO_TEST#!#tradableAsset2=INR,USD,BTC,FLO,BTC_TEST,FLO_TEST,
|
||||||
#!#validTradingAmount=10000,50000,100000,#!#btcTradeMargin=5000
|
#!#validTradingAmount=10,50,100,#!#btcTradeMargin=5000
|
||||||
#!#MaxBackups=2
|
#!#MaxBackups=2
|
||||||
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
#!#supernodesPubKeys=0315C3A20FE7096CC2E0F81A80D5F1A687B8F9EFA65242A0B0881E1BA3EE7D7D53,
|
||||||
03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6,
|
03F7493F11B8E44B9798CD434D20FBE7FA34B9779D144984889D11A17C56A18742,039B4AA00DBFC0A6631DE6DA83526611A0E6B857D3579DF840BBDEAE8B6898E3B6,
|
||||||
@ -12336,75 +12336,32 @@
|
|||||||
withdraw_res.currency,
|
withdraw_res.currency,
|
||||||
withdraw_res.change_adress,
|
withdraw_res.change_adress,
|
||||||
async function (res) {
|
async function (res) {
|
||||||
console.log(
|
console.log(res);
|
||||||
res
|
if (typeof res == "string"
|
||||||
);
|
&& res.length > 0) {
|
||||||
if (typeof res ==
|
|
||||||
"string" &&
|
|
||||||
res.length >
|
|
||||||
0) {
|
|
||||||
try {
|
try {
|
||||||
let
|
let resp_obj = JSON.parse(res);
|
||||||
resp_obj =
|
let resp_txid = resp_obj.txid.result || resp_obj.txid;
|
||||||
JSON
|
let msg =
|
||||||
.parse(
|
|
||||||
res
|
|
||||||
);
|
|
||||||
let
|
|
||||||
resp_txid =
|
|
||||||
resp_obj
|
|
||||||
.txid
|
|
||||||
.result ||
|
|
||||||
resp_obj
|
|
||||||
.txid;
|
|
||||||
let
|
|
||||||
msg =
|
|
||||||
`Transaction Id for your withdrawn crypto asset: ${resp_txid}`;
|
`Transaction Id for your withdrawn crypto asset: ${resp_txid}`;
|
||||||
|
|
||||||
readDB
|
readDB('crypto_balances', withdraw_res.id)
|
||||||
(
|
|
||||||
'crypto_balances',
|
|
||||||
withdraw_res
|
|
||||||
.id
|
|
||||||
)
|
|
||||||
.then(
|
.then(
|
||||||
res_bal => {
|
res_bal => {
|
||||||
// btc_eq_receiving_amount
|
// btc_eq_receiving_amount
|
||||||
// =
|
// =
|
||||||
// Number(parseFloat(EqCryptoWd).toFixed(8));
|
// Number(parseFloat(EqCryptoWd).toFixed(8));
|
||||||
res_bal
|
res_bal.crypto_balance -= EqCryptoWd;
|
||||||
.crypto_balance -=
|
updateinDB('crypto_balances', res_bal, withdraw_res.id)
|
||||||
EqCryptoWd;
|
.then(res_obj => {
|
||||||
updateinDB
|
const res_obj_str = JSON.stringify(res_obj);
|
||||||
(
|
const res_obj_hash = Crypto.SHA256(res_obj_str);
|
||||||
'crypto_balances',
|
const res_obj_sign = RM_WALLET .sign(
|
||||||
res_bal,
|
res_obj_hash,
|
||||||
withdraw_res
|
localbitcoinplusplus
|
||||||
.id
|
.wallets
|
||||||
)
|
.MY_SUPERNODE_PRIVATE_KEY
|
||||||
.then(
|
);
|
||||||
res_obj => {
|
|
||||||
const
|
|
||||||
res_obj_str =
|
|
||||||
JSON
|
|
||||||
.stringify(
|
|
||||||
res_obj
|
|
||||||
);
|
|
||||||
const
|
|
||||||
res_obj_hash =
|
|
||||||
Crypto
|
|
||||||
.SHA256(
|
|
||||||
res_obj_str
|
|
||||||
);
|
|
||||||
const
|
|
||||||
res_obj_sign =
|
|
||||||
RM_WALLET
|
|
||||||
.sign(
|
|
||||||
res_obj_hash,
|
|
||||||
localbitcoinplusplus
|
|
||||||
.wallets
|
|
||||||
.MY_SUPERNODE_PRIVATE_KEY
|
|
||||||
);
|
|
||||||
|
|
||||||
const
|
const
|
||||||
updateUserCryptoBalanceObject = {
|
updateUserCryptoBalanceObject = {
|
||||||
@ -14414,7 +14371,7 @@
|
|||||||
trx.addoutput(change_adress, change_amount);
|
trx.addoutput(change_adress, change_amount);
|
||||||
}
|
}
|
||||||
var sendFloData =
|
var sendFloData =
|
||||||
`localbitcoinpluslus tx: Send ${btc_eq_receiving_amount} satoshis to ${receiver_address}.`; //flochange adding place for flodata -- need a validation of 1024 chars
|
`localbitcoinpluslus tx: Send ${btc_eq_receiving_amount} ${crypto_type} to ${receiver_address}.`; //flochange adding place for flodata -- need a validation of 1024 chars
|
||||||
if (crypto_type == "FLO" || crypto_type == "FLO_TEST") {
|
if (crypto_type == "FLO" || crypto_type == "FLO_TEST") {
|
||||||
trx.addflodata(sendFloData); // flochange .. create this function
|
trx.addflodata(sendFloData); // flochange .. create this function
|
||||||
}
|
}
|
||||||
@ -14424,7 +14381,8 @@
|
|||||||
|
|
||||||
let signedTxHash = trx.sign(utxo_addr_wif, 1); //SIGHASH_ALL DEFAULT 1
|
let signedTxHash = trx.sign(utxo_addr_wif, 1); //SIGHASH_ALL DEFAULT 1
|
||||||
showMessage(`Signed Transaction Hash: ${signedTxHash}`);
|
showMessage(`Signed Transaction Hash: ${signedTxHash}`);
|
||||||
|
console.log(signedTxHash);
|
||||||
|
|
||||||
var http = new XMLHttpRequest();
|
var http = new XMLHttpRequest();
|
||||||
var tx_send_url = `${blockchain_explorer}/api/tx/send`;
|
var tx_send_url = `${blockchain_explorer}/api/tx/send`;
|
||||||
var params = `{"rawtx":"${signedTxHash}"}`;
|
var params = `{"rawtx":"${signedTxHash}"}`;
|
||||||
@ -15601,13 +15559,11 @@
|
|||||||
try {
|
try {
|
||||||
var res_obj = JSON.parse(res);
|
var res_obj = JSON.parse(res);
|
||||||
|
|
||||||
if (typeof res_obj.method !== "string"
|
if (typeof res_obj.globalParams !== "object"
|
||||||
|| typeof res_obj.globalParams !== "object"
|
|| (typeof res_obj.globalParams.receiverFloId == "string"
|
||||||
|| typeof res_obj.globalParams.receiverFloId !== "string"
|
&& res_obj.globalParams.receiverFloId !==
|
||||||
|| res_obj.globalParams.receiverFloId !==
|
localbitcoinplusplus.wallets.my_local_flo_address)) {
|
||||||
localbitcoinplusplus.wallets.my_local_flo_address) {
|
return;
|
||||||
console.warn(`WARNING: Incomplete onMessage request received.`);
|
|
||||||
//return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const isIncomingMessageValid = await validateIncomingMessage(res);
|
const isIncomingMessageValid = await validateIncomingMessage(res);
|
||||||
@ -16624,10 +16580,11 @@
|
|||||||
if (obj.length > 0) {
|
if (obj.length > 0) {
|
||||||
for (var prop in obj) {
|
for (var prop in obj) {
|
||||||
if (!obj.hasOwnProperty(prop)) continue;
|
if (!obj.hasOwnProperty(prop)) continue;
|
||||||
await updateinDB(tableStoreName, obj[prop], obj[
|
//if(obj[prop].)
|
||||||
prop].trader_flo_address).then(()=>{
|
await updateinDB(tableStoreName, obj[prop], obj[prop].id, true)
|
||||||
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
.then(()=>{
|
||||||
});
|
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@ -16712,8 +16669,8 @@
|
|||||||
for (var prop in obj) {
|
for (var prop in obj) {
|
||||||
if (!obj.hasOwnProperty(prop)) continue;
|
if (!obj.hasOwnProperty(prop)) continue;
|
||||||
await localbitcoinplusplus.newBackupDatabase.db[su_db_data.trader_flo_address]
|
await localbitcoinplusplus.newBackupDatabase.db[su_db_data.trader_flo_address]
|
||||||
.backup_updateinDB(tableStoreName, obj[prop], obj[prop]
|
.backup_updateinDB(tableStoreName, obj[prop], obj[prop].id, true)
|
||||||
.trader_flo_address).then(()=>{
|
.then(()=>{
|
||||||
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -17223,6 +17180,8 @@
|
|||||||
if(typeof res_obj.globalParams.primarySupernode !="string") return;
|
if(typeof res_obj.globalParams.primarySupernode !="string") return;
|
||||||
localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.primarySupernode)
|
localbitcoinplusplus.kademlia.determineClosestSupernode(res_obj.globalParams.primarySupernode)
|
||||||
.then(my_closest_su_list=>{
|
.then(my_closest_su_list=>{
|
||||||
|
console.log(my_closest_su_list);
|
||||||
|
|
||||||
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
|
const primarySupernodeOfThisUser = my_closest_su_list[0].data.id;
|
||||||
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
|
const backup_server_db_instance = localbitcoinplusplus.newBackupDatabase.db[primarySupernodeOfThisUser];
|
||||||
|
|
||||||
@ -17732,7 +17691,7 @@
|
|||||||
doSend(JSON.stringify(response_from_sever)); // send response to client
|
doSend(JSON.stringify(response_from_sever)); // send response to client
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case "updateUserCryptoBalanceRequest":
|
case "updateUserCryptoBalanceRequest":
|
||||||
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
if (localbitcoinplusplus.master_configurations.supernodesPubKeys
|
||||||
.includes(res_obj.nodePubKey)) {
|
.includes(res_obj.nodePubKey)) {
|
||||||
let updateUserCryptoBalanceResponseObject = res_obj.params[0];
|
let updateUserCryptoBalanceResponseObject = res_obj.params[0];
|
||||||
@ -19031,7 +18990,7 @@
|
|||||||
if (!obj.hasOwnProperty(prop)) continue;
|
if (!obj.hasOwnProperty(prop)) continue;
|
||||||
await localbitcoinplusplus.newBackupDatabase.db[su_db_data.trader_flo_address]
|
await localbitcoinplusplus.newBackupDatabase.db[su_db_data.trader_flo_address]
|
||||||
.backup_updateinDB(tableStoreName, obj[prop], obj[prop]
|
.backup_updateinDB(tableStoreName, obj[prop], obj[prop]
|
||||||
.trader_flo_address).then(()=>{
|
.id, true).then(()=>{
|
||||||
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
showMessage(`INFO: "${tableStoreName}" datastore syncing is complete.`);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
@ -19611,7 +19570,9 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function updateinDB(tablename, Obj, key) {
|
async function updateinDB(tablename, Obj, key, updateByVectorClock=false) {
|
||||||
|
// updateByVectorClock==true will not return Obj back.
|
||||||
|
// Return value will be undefined
|
||||||
try {
|
try {
|
||||||
if(typeof Obj.vectorClock == "undefined") {
|
if(typeof Obj.vectorClock == "undefined") {
|
||||||
Obj.vectorClock = 0;
|
Obj.vectorClock = 0;
|
||||||
@ -19623,9 +19584,32 @@
|
|||||||
}
|
}
|
||||||
var request = db.transaction([tablename], "readwrite")
|
var request = db.transaction([tablename], "readwrite")
|
||||||
let store = request.objectStore(tablename)
|
let store = request.objectStore(tablename)
|
||||||
await store.put(Obj);
|
if (updateByVectorClock===true) {
|
||||||
await request.complete;
|
if (typeof key=="undefined") {
|
||||||
return Obj;
|
key = Obj[store.keyPath];
|
||||||
|
}
|
||||||
|
let objectStoreRequest = store.get(key);
|
||||||
|
objectStoreRequest.onsuccess =
|
||||||
|
function(event) {
|
||||||
|
var myRecord = objectStoreRequest.result;
|
||||||
|
if(typeof myRecord !=="object") {
|
||||||
|
console.error('WARNING: Failed to update '+tablename);
|
||||||
|
console.log(tablename);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (myRecord.vectorClock+1 < Obj.vectorClock) {
|
||||||
|
await store.put(Obj);
|
||||||
|
await request.complete;
|
||||||
|
resolve(Obj);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
await store.put(Obj);
|
||||||
|
await request.complete;
|
||||||
|
return Obj;
|
||||||
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return new Error(error);
|
return new Error(error);
|
||||||
}
|
}
|
||||||
@ -19947,7 +19931,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
async backup_updateinDB(tablename, Obj, key) {
|
async backup_updateinDB(tablename, Obj, key, updateByVectorClock=false) {
|
||||||
try {
|
try {
|
||||||
if(typeof Obj.vectorClock == "undefined") {
|
if(typeof Obj.vectorClock == "undefined") {
|
||||||
Obj.vectorClock = 0;
|
Obj.vectorClock = 0;
|
||||||
@ -19959,9 +19943,30 @@
|
|||||||
}
|
}
|
||||||
this.request = this.db.transaction([tablename], "readwrite")
|
this.request = this.db.transaction([tablename], "readwrite")
|
||||||
let store = this.request.objectStore(tablename)
|
let store = this.request.objectStore(tablename)
|
||||||
await store.put(Obj);
|
|
||||||
await this.request.complete;
|
if (updateByVectorClock===true) {
|
||||||
return Obj;
|
if (typeof key=="undefined") {
|
||||||
|
key = Obj[store.keyPath];
|
||||||
|
}
|
||||||
|
let objectStoreRequest = store.get(key);
|
||||||
|
objectStoreRequest.onsuccess =
|
||||||
|
function(event) {
|
||||||
|
return new Promise(async (resolve, reject)=>{
|
||||||
|
var myRecord = objectStoreRequest.result;
|
||||||
|
if (myRecord.vectorClock+1 < Obj.vectorClock) {
|
||||||
|
await store.put(Obj);
|
||||||
|
await this.request.complete;
|
||||||
|
resolve(Obj);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
} else {
|
||||||
|
await store.put(Obj);
|
||||||
|
await this.request.complete;
|
||||||
|
return Obj;
|
||||||
|
}
|
||||||
|
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
return new Error(error);
|
return new Error(error);
|
||||||
}
|
}
|
||||||
@ -20940,14 +20945,15 @@
|
|||||||
const RM_WALLET = new localbitcoinplusplus.wallets;
|
const RM_WALLET = new localbitcoinplusplus.wallets;
|
||||||
const RM_RPC = new localbitcoinplusplus.rpc;
|
const RM_RPC = new localbitcoinplusplus.rpc;
|
||||||
|
|
||||||
let updatedBTCBalanceObjectString = JSON.stringify(
|
const updatedBTCBalanceObjectString = JSON.stringify(updatedCryptobalances);
|
||||||
updatedCryptobalances);
|
const updatedBTCBalanceObjectStringHash = Crypto.SHA256(updatedBTCBalanceObjectString);
|
||||||
let updatedBTCBalanceObjectSign = RM_WALLET
|
|
||||||
.sign(updatedBTCBalanceObjectString,
|
const updatedBTCBalanceObjectSign = RM_WALLET
|
||||||
|
.sign(updatedBTCBalanceObjectStringHash,
|
||||||
localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
|
localbitcoinplusplus.wallets.MY_SUPERNODE_PRIVATE_KEY
|
||||||
);
|
);
|
||||||
|
|
||||||
let updateUserCryptoBalanceObject = {
|
const updateUserCryptoBalanceObject = {
|
||||||
updatedBTCBalanceObject: updatedBTCBalanceObject,
|
updatedBTCBalanceObject: updatedBTCBalanceObject,
|
||||||
updatedBTCBalanceObjectSign: updatedBTCBalanceObjectSign,
|
updatedBTCBalanceObjectSign: updatedBTCBalanceObjectSign,
|
||||||
trader_flo_address: trader_deposits.trader_flo_address,
|
trader_flo_address: trader_deposits.trader_flo_address,
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user