Fixes for new flosight changes

This commit is contained in:
sairajzero 2023-05-10 01:54:03 +05:30
parent 86a340a2e8
commit 8b4669cea8

View File

@ -52,46 +52,32 @@
floWebWallet.syncTransactions = function (addr) { floWebWallet.syncTransactions = function (addr) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
compactIDB.readData('lastSync', addr).then(lastSync => { compactIDB.readData('lastSync', addr).then(lastSync => {
lastSync = lastSync | 0; const old_support = Number.isInteger(lastSync); //backward support
getNewTxs(addr, lastSync).then(APIresult => { let fetch_options = {};
if (typeof lastSync == 'string' && /^[a-f0-9]{64}&/i.test(lastSync)) //txid as lastSync
fetch_options.after = lastSync;
floBlockchainAPI.readTxs(addr, fetch_options).then(response => {
let newItems = response.items.map(({ time, txid, floData, isCoinBase, vin, vout }) => ({
time, txid, floData, isCoinBase,
sender: isCoinBase ? `(mined)${vin[0].coinbase}` : vin[0].addr,
receiver: isCoinBase ? addr : vout[0].scriptPubKey.addresses[0]
}));
compactIDB.readData('transactions', addr).then(IDBresult => { compactIDB.readData('transactions', addr).then(IDBresult => {
if (IDBresult === undefined) if ((IDBresult === undefined || old_support))//backward support
var promise1 = compactIDB.addData('transactions', APIresult.items, addr) IDBresult = [];
else console.debug(old_support, IDBresult)
var promise1 = compactIDB.writeData('transactions', IDBresult.concat(APIresult.items), addr) compactIDB.writeData('transactions', IDBresult.concat(newItems), addr).then(result => {
var promise2 = compactIDB.writeData('lastSync', APIresult.totalItems, addr) compactIDB.writeData('lastSync', response.lastItem, addr)
Promise.all([promise1, promise2]).then(values => resolve(APIresult.items)) .then(result => resolve(newItems))
.catch(error => reject(error))
}).catch(error => reject(error))
}) })
})
}).catch(error => reject(error))
}).catch(error => reject(error)) }).catch(error => reject(error))
}) })
} }
//Get new Tx in blockchain since last sync using API
async function getNewTxs(addr, ignoreOld) {
try {
const { totalItems } = await floBlockchainAPI.readTxs(addr, 0, 1);
const newItems = totalItems - ignoreOld;
if (newItems > 0) {
const { items: newTxs } = await floBlockchainAPI.readTxs(addr, 0, newItems * 2);
const filteredData = []
newTxs
.slice(0, newItems)
.forEach(({ time, txid, floData, isCoinBase, vin, vout }) => {
const sender = isCoinBase ? `(mined)${vin[0].coinbase}` : vin[0].addr;
const receiver = isCoinBase ? addr : vout[0].scriptPubKey.addresses[0];
filteredData.unshift({ time, txid, floData, sender, receiver });
})
return { totalItems, items: filteredData };
} else {
return { totalItems, items: [] };
}
} catch (error) {
throw new Error(`Failed to get new transactions for ${addr}: ${error.message}`);
}
}
//read transactions stored in IDB : resolves Array(storedItems) //read transactions stored in IDB : resolves Array(storedItems)
floWebWallet.readTransactions = function (addr) { floWebWallet.readTransactions = function (addr) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -111,9 +97,9 @@
} }
//bulk transfer tokens //bulk transfer tokens
floWebWallet.bunkTransferTokens = function (sender, privKey, token, receivers) { floWebWallet.bulkTransferTokens = function (sender, privKey, token, receivers) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
floTokenAPI.bunkTransferTokens(sender, privKey, token, receivers) floTokenAPI.bulkTransferTokens(sender, privKey, token, receivers)
.then(result => resolve(result)) .then(result => resolve(result))
.catch(error => reject(error)) .catch(error => reject(error))
}) })