Files
paperclip-wallet/renderer/transactions.js
Exlo 6aaa484be8 explorer link fix for transactions
explorer link fix for transactions
2022-07-07 07:18:24 +02:00

179 lines
5.7 KiB
JavaScript
Executable File

const {ipcRenderer} = require("electron");
const moment = require("moment");
class Transactions {
constructor() {
this.filter = "";
this.isSyncing = false;
this.isLoading = false;
}
setIsSyncing(value) {
this.isSyncing = value;
}
getIsSyncing() {
return this.isSyncing;
}
setIsLoading(value) {
this.isLoading = value;
}
getIsLoading() {
return this.isLoading;
}
setFilter(text) {
this.filter = text;
}
getFilter() {
return this.filter;
}
clearFilter() {
this.filter = "";
}
syncTransactionsForSingleAddress(addressList, counters, lastBlock, counter) {
if (counter < addressList.length) {
SyncProgress.setText(vsprintf("Syncing address transactions %d/%d, please wait...", [counter, addressList.length]));
var startBlock = parseInt(counters.transactions) || 0;
var params = vsprintf("?address=%s&fromBlock=%d&toBlock=%d", [
addressList[counter].toLowerCase(),
startBlock,
lastBlock
]);
$.getJSON("https://explorer.ethoprotocol.com/api?module=account&action=txlist&address=" + addressList[counter].toLowerCase(), function (result) {
if (result.result) {
result.result.forEach(element => {
if (element.from && element.to && startBlock <= parseInt(element.blockNumber) && lastBlock >= parseInt(element.blockNumber)) {
ipcRenderer.send("storeTransaction", {
block: element.blockNumber.toString(),
txhash: element.hash.toLowerCase(),
fromaddr: element.from.toLowerCase(),
timestamp: moment.unix(parseInt(element.timeStamp)).format("YYYY-MM-DD HH:mm:ss"),
toaddr: element.to.toLowerCase(),
value: element.value
});
}
});
}
// call the transaction sync for the next address
EthoTransactions.syncTransactionsForSingleAddress(addressList, counters, lastBlock, counter + 1);
});
} else {
// update the counter and store it back to file system
counters.transactions = lastBlock;
EthoDatatabse.setCounters(counters);
SyncProgress.setText("Syncing transactions is complete.");
EthoTransactions.setIsSyncing(false);
}
}
syncTransactionsForAllAddresses(lastBlock) {
var counters = EthoDatatabse.getCounters();
var counter = 0;
EthoBlockchain.getAccounts(function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
EthoTransactions.setIsSyncing(true);
EthoTransactions.syncTransactionsForSingleAddress(data, counters, lastBlock, counter);
});
}
renderTransactions() {
if (!EthoTransactions.getIsLoading()) {
EthoMainGUI.renderTemplate("transactions.html", {});
$(document).trigger("render_transactions");
EthoTransactions.setIsLoading(true);
// show the loading overlay for transactions
$("#loadingTransactionsOverlay").css("display", "block");
setTimeout(() => {
var dataTransactions = ipcRenderer.sendSync("getTransactions");
var addressList = EthoWallets.getAddressList();
dataTransactions.forEach(function (element) {
var isFromValid = addressList.indexOf(element[2].toLowerCase()) > -1;
var isToValid = addressList.indexOf(element[3].toLowerCase()) > -1;
if (isToValid && !isFromValid) {
element.unshift(0);
} else if (!isToValid && isFromValid) {
element.unshift(1);
} else {
element.unshift(2);
}
});
EthoTableTransactions.initialize("#tableTransactionsForAll", dataTransactions);
EthoTransactions.setIsLoading(false);
}, 200);
}
}
enableKeepInSync() {
EthoBlockchain.subsribeNewBlockHeaders(function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
EthoBlockchain.getBlock(data.number, true, function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
if (data.transactions) {
data.transactions.forEach(element => {
if (element.from && element.to) {
if (EthoWallets.getAddressExists(element.from) || EthoWallets.getAddressExists(element.to)) {
var Transaction = {
block: element.blockNumber.toString(),
txhash: element.hash.toLowerCase(),
fromaddr: element.from.toLowerCase(),
timestamp: moment.unix(data.timestamp).format("YYYY-MM-DD HH:mm:ss"),
toaddr: element.to.toLowerCase(),
value: Number(element.value).toExponential(5).toString().replace("+", "")
};
// store transaction and notify about new transactions
ipcRenderer.send("storeTransaction", Transaction);
$(document).trigger("onNewAccountTransaction");
iziToast.info({
title: "New Transaction",
message: vsprintf("Transaction from address %s to address %s was just processed", [Transaction.fromaddr, Transaction.toaddr]),
position: "topRight",
timeout: 10000
});
if (EthoMainGUI.getAppState() == "transactions") {
setTimeout(function () {
EthoTransactions.renderTransactions();
}, 500);
}
}
}
});
}
});
});
}
disableKeepInSync() {
EthoBlockchain.unsubsribeNewBlockHeaders(function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
// success
});
}
}
// create new transactions variable
EthoTransactions = new Transactions();