+ beautifier

* version info
This commit is contained in:
Taegus
2019-03-03 10:37:19 +01:00
parent de73afd5cd
commit b0cd7d517a
19 changed files with 1648 additions and 1697 deletions

View File

@@ -1,282 +1,280 @@
// In renderer process (web page).
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class Blockchain {
constructor() {
this.txSubscribe = null;
this.bhSubscribe = null;
}
constructor() {
this.txSubscribe = null;
this.bhSubscribe = null;
}
getBlock(blockToGet, includeData, clbError, clbSuccess) {
web3Local.eth.getBlock(blockToGet, includeData, function(error, block) {
if (error) {
clbError(error);
} else {
clbSuccess(block);
}
});
}
getBlock(blockToGet, includeData, clbError, clbSuccess) {
web3Local.eth.getBlock(blockToGet, includeData, function (error, block) {
if (error) {
clbError(error);
} else {
clbSuccess(block);
}
});
}
getAccounts(clbError, clbSuccess) {
web3Local.eth.getAccounts(function(err, res) {
if (err) {
clbError(err);
} else {
clbSuccess(res);
}
});
}
getAccounts(clbError, clbSuccess) {
web3Local.eth.getAccounts(function (err, res) {
if (err) {
clbError(err);
} else {
clbSuccess(res);
}
});
}
isAddress(address) {
return web3Local.utils.isAddress(address);
}
isAddress(address) {
return web3Local.utils.isAddress(address);
}
getTransaction(thxid, clbError, clbSuccess) {
web3Local.eth.getTransaction(thxid, function( error, result ) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
});
}
getTransaction(thxid, clbError, clbSuccess) {
web3Local.eth.getTransaction(thxid, function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
});
}
getTranasctionFee(fromAddress, toAddress, value, clbError, clbSuccess) {
web3Local.eth.getTransactionCount(fromAddress, function( error, result ) {
if (error) {
clbError(error);
} else {
var amountToSend = web3Local.utils.toWei(value, "ether"); //convert to wei value
var RawTransaction = {
from: fromAddress,
to: toAddress,
value: amountToSend,
nonce: result
};
web3Local.eth.estimateGas(RawTransaction, function( error, result ) {
if (error) {
clbError(error);
} else {
var usedGas = result + 1;
web3Local.eth.getGasPrice(function( error, result ) {
if (error) {
clbError(error);
} else {
clbSuccess(result * usedGas);
}
});
}
});
}
});
}
getTranasctionFee(fromAddress, toAddress, value, clbError, clbSuccess) {
web3Local.eth.getTransactionCount(fromAddress, function (error, result) {
if (error) {
clbError(error);
} else {
var amountToSend = web3Local.utils.toWei(value, "ether"); //convert to wei value
var RawTransaction = {
from: fromAddress,
to: toAddress,
value: amountToSend,
nonce: result
};
prepareTransaction(password, fromAddress, toAddress, value, clbError, clbSuccess) {
web3Local.eth.personal.unlockAccount(fromAddress, password, function( error, result ) {
if (error) {
clbError("Wrong password for the selected address!");
} else
{
web3Local.eth.getTransactionCount(fromAddress, 'pending', function( error, result ) {
if (error) {
clbError(error);
} else {
var amountToSend = web3Local.utils.toWei(value, "ether"); //convert to wei value
var RawTransaction = {
from: fromAddress,
to: toAddress,
value: amountToSend,
nonce: result
};
web3Local.eth.estimateGas(RawTransaction, function( error, result ) {
if (error) {
clbError(error);
} else {
RawTransaction.gas = result + 1;
web3Local.eth.getGasPrice(function( error, result ) {
if (error) {
clbError(error);
} else {
RawTransaction.gasPrice = result;
web3Local.eth.signTransaction(RawTransaction, fromAddress, function( error, result ) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
});
}
});
}
});
}
});
}
});
}
sendTransaction(rawTransaction, clbError, clbSuccess) {
web3Local.eth.sendSignedTransaction(rawTransaction, function( error, result ) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
});
}
getAccountsData(clbError, clbSuccess) {
var rendererData = {};
rendererData.sumBalance = 0;
rendererData.addressData = [];
var wallets = EthoDatatabse.getWallets();
var counter = 0;
web3Local.eth.getAccounts(function(err, res) {
if (err) {
clbError(err);
web3Local.eth.estimateGas(RawTransaction, function (error, result) {
if (error) {
clbError(error);
} else {
for (var i = 0; i < res.length; i++) {
var walletName = vsprintf("Account %d", [i + 1]);
if (wallets) {
walletName = wallets.names[res[i]] || walletName;
}
var addressInfo = {};
addressInfo.balance = 0;
addressInfo.address = res[i];
addressInfo.name = walletName;
rendererData.addressData.push(addressInfo);
}
if (rendererData.addressData.length > 0) {
updateBalance(counter);
var usedGas = result + 1;
web3Local.eth.getGasPrice(function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(rendererData);
}
}
});
function updateBalance(index)
{
web3Local.eth.getBalance(rendererData.addressData[index].address, function(error, balance) {
rendererData.addressData[index].balance = parseFloat(web3Local.utils.fromWei(balance, 'ether')).toFixed(2);
rendererData.sumBalance = rendererData.sumBalance + parseFloat(web3Local.utils.fromWei(balance, 'ether'));
if (counter < rendererData.addressData.length - 1) {
counter++;
updateBalance(counter);
} else {
rendererData.sumBalance = parseFloat(rendererData.sumBalance).toFixed(2);
clbSuccess(rendererData);
}
});
}
}
getAddressListData(clbError, clbSuccess) {
var rendererData = {};
rendererData.addressData = [];
var wallets = EthoDatatabse.getWallets();
var counter = 0;
web3Local.eth.getAccounts(function(err, res) {
if (err) {
clbError(err);
} else {
for (var i = 0; i < res.length; i++) {
var walletName = vsprintf("Account %d", [i + 1]);
if (wallets) {
walletName = wallets.names[res[i]] || walletName;
}
var addressInfo = {};
addressInfo.address = res[i];
addressInfo.name = walletName;
rendererData.addressData.push(addressInfo);
}
clbSuccess(rendererData);
}
});
}
createNewAccount(password, clbError, clbSuccess) {
web3Local.eth.personal.newAccount(password, function(error, account) {
if (error) {
clbError(error);
} else {
clbSuccess(account);
}
});
}
importFromPrivateKey(privateKey, password) {
web3Local.eth.accounts.wallet.clear();
web3Local.eth.accounts.wallet.add(privateKey);
return web3Local.eth.accounts.wallet.encrypt('123456789');
}
subsribePendingTransactions(clbError, clbSuccess, clbData) {
this.txSubscribe = web3Local.eth.subscribe('pendingTransactions', function(error, result){
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
}).on("data", function(transaction){
if (clbData) {
clbData(transaction);
}
});
}
unsubsribePendingTransactions(clbError, clbSuccess) {
if (this.txSubscribe) {
this.txSubscribe.unsubscribe(function(error, success){
if(error) {
clbError(error);
} else {
clbSuccess(success) ;
}
clbSuccess(result * usedGas);
}
});
}
}
}
});
}
});
}
subsribeNewBlockHeaders(clbError, clbSuccess, clbData) {
this.bhSubscribe = web3Local.eth.subscribe('newBlockHeaders', function(error, result){
if (error) {
prepareTransaction(password, fromAddress, toAddress, value, clbError, clbSuccess) {
web3Local.eth.personal.unlockAccount(fromAddress, password, function (error, result) {
if (error) {
clbError("Wrong password for the selected address!");
} else {
web3Local.eth.getTransactionCount(fromAddress, "pending", function (error, result) {
if (error) {
clbError(error);
} else {
var amountToSend = web3Local.utils.toWei(value, "ether"); //convert to wei value
var RawTransaction = {
from: fromAddress,
to: toAddress,
value: amountToSend,
nonce: result
};
web3Local.eth.estimateGas(RawTransaction, function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
}).on("data", function(blockHeader){
if (clbData) {
clbData(blockHeader);
}
});
}
unsubsribeNewBlockHeaders(clbError, clbSuccess) {
if (this.bhSubscribe) {
this.bhSubscribe.unsubscribe(function(error, success){
if(error) {
} else {
RawTransaction.gas = result + 1;
web3Local.eth.getGasPrice(function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(success) ;
}
});
}
}
} else {
RawTransaction.gasPrice = result;
web3Local.eth.signTransaction(RawTransaction, fromAddress, function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
});
}
});
}
});
}
});
}
});
}
closeConnection() {
web3Local.currentProvider.connection.close();
sendTransaction(rawTransaction, clbError, clbSuccess) {
web3Local.eth.sendSignedTransaction(rawTransaction, function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
});
}
getAccountsData(clbError, clbSuccess) {
var rendererData = {};
rendererData.sumBalance = 0;
rendererData.addressData = [];
var wallets = EthoDatatabse.getWallets();
var counter = 0;
web3Local.eth.getAccounts(function (err, res) {
if (err) {
clbError(err);
} else {
for (var i = 0; i < res.length; i++) {
var walletName = vsprintf("Account %d", [i + 1]);
if (wallets) {
walletName = wallets.names[res[i]] || walletName;
}
var addressInfo = {};
addressInfo.balance = 0;
addressInfo.address = res[i];
addressInfo.name = walletName;
rendererData.addressData.push(addressInfo);
}
if (rendererData.addressData.length > 0) {
updateBalance(counter);
} else {
clbSuccess(rendererData);
}
}
});
function updateBalance(index) {
web3Local.eth.getBalance(rendererData.addressData[index].address, function (error, balance) {
rendererData.addressData[index].balance = parseFloat(web3Local.utils.fromWei(balance, "ether")).toFixed(2);
rendererData.sumBalance = rendererData.sumBalance + parseFloat(web3Local.utils.fromWei(balance, "ether"));
if (counter < rendererData.addressData.length - 1) {
counter++;
updateBalance(counter);
} else {
rendererData.sumBalance = parseFloat(rendererData.sumBalance).toFixed(2);
clbSuccess(rendererData);
}
});
}
}
getAddressListData(clbError, clbSuccess) {
var rendererData = {};
rendererData.addressData = [];
var wallets = EthoDatatabse.getWallets();
var counter = 0;
web3Local.eth.getAccounts(function (err, res) {
if (err) {
clbError(err);
} else {
for (var i = 0; i < res.length; i++) {
var walletName = vsprintf("Account %d", [i + 1]);
if (wallets) {
walletName = wallets.names[res[i]] || walletName;
}
var addressInfo = {};
addressInfo.address = res[i];
addressInfo.name = walletName;
rendererData.addressData.push(addressInfo);
}
clbSuccess(rendererData);
}
});
}
createNewAccount(password, clbError, clbSuccess) {
web3Local.eth.personal.newAccount(password, function (error, account) {
if (error) {
clbError(error);
} else {
clbSuccess(account);
}
});
}
importFromPrivateKey(privateKey, password) {
web3Local.eth.accounts.wallet.clear();
web3Local.eth.accounts.wallet.add(privateKey);
return web3Local.eth.accounts.wallet.encrypt("123456789");
}
subsribePendingTransactions(clbError, clbSuccess, clbData) {
this.txSubscribe = web3Local.eth.subscribe("pendingTransactions", function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
}).on("data", function (transaction) {
if (clbData) {
clbData(transaction);
}
});
}
unsubsribePendingTransactions(clbError, clbSuccess) {
if (this.txSubscribe) {
this.txSubscribe.unsubscribe(function (error, success) {
if (error) {
clbError(error);
} else {
clbSuccess(success);
}
});
}
}
subsribeNewBlockHeaders(clbError, clbSuccess, clbData) {
this.bhSubscribe = web3Local.eth.subscribe("newBlockHeaders", function (error, result) {
if (error) {
clbError(error);
} else {
clbSuccess(result);
}
}).on("data", function (blockHeader) {
if (clbData) {
clbData(blockHeader);
}
});
}
unsubsribeNewBlockHeaders(clbError, clbSuccess) {
if (this.bhSubscribe) {
this.bhSubscribe.unsubscribe(function (error, success) {
if (error) {
clbError(error);
} else {
clbSuccess(success);
}
});
}
}
closeConnection() {
web3Local.currentProvider.connection.close();
}
}
// create new blockchain variable
EthoBlockchain = new Blockchain();
EthoBlockchain = new Blockchain();

View File

@@ -1,63 +1,64 @@
// In renderer process (web page).
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class Datatabse {
constructor() {}
constructor() {}
getCounters() {
var counters = ipcRenderer.sendSync('getJSONFile', 'counters.json');
getCounters() {
var counters = ipcRenderer.sendSync("getJSONFile", "counters.json");
if (counters == null) {
counters = {};
}
return counters;
if (counters == null) {
counters = {};
}
setCounters(counters) {
ipcRenderer.sendSync('setJSONFile',
{
file: 'counters.json',
data: counters
});
return counters;
}
setCounters(counters) {
ipcRenderer.sendSync("setJSONFile", {
file: "counters.json",
data: counters
});
}
getWallets() {
var wallets = ipcRenderer.sendSync("getJSONFile", "wallets.json");
if (!wallets) {
wallets = {
names: {}
};
}
getWallets() {
var wallets = ipcRenderer.sendSync('getJSONFile', 'wallets.json');
return wallets;
}
if (!wallets) {
wallets = { names: {} };
}
return wallets;
setWallets(wallets) {
ipcRenderer.sendSync("setJSONFile", {
file: "wallets.json",
data: wallets
});
}
getAddresses() {
var addressBook = ipcRenderer.sendSync("getJSONFile", "addresses.json");
if (!addressBook) {
addressBook = {
names: {}
};
}
setWallets(wallets) {
ipcRenderer.sendSync('setJSONFile',
{
file: 'wallets.json',
data: wallets
});
}
return addressBook;
}
getAddresses() {
var addressBook = ipcRenderer.sendSync('getJSONFile', 'addresses.json');
if (!addressBook) {
addressBook = { names: {} };
}
return addressBook;
}
setAddresses(addresses) {
ipcRenderer.sendSync('setJSONFile',
{
file: 'addresses.json',
data: addresses
});
}
setAddresses(addresses) {
ipcRenderer.sendSync("setJSONFile", {
file: "addresses.json",
data: addresses
});
}
}
// create new account variable
EthoDatatabse = new Datatabse();
EthoDatatabse = new Datatabse();

View File

@@ -1,142 +1,142 @@
// In renderer process (web page).
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class MainGUI {
constructor() {
this.appState = "account";
constructor() {
this.appState = "account";
}
changeAppState(newState) {
this.appState = newState;
$(".sidebarIconWrapper").removeClass("iconSelected");
switch (this.appState) {
case "account":
$("#mainNavBtnWalletsWrapper").addClass("iconSelected");
break;
case "addressBook":
$("#mainNavBtnAddressBoookWrapper").addClass("iconSelected");
break;
case "send":
$("#mainNavBtnSendWrapper").addClass("iconSelected");
break;
case "transactions":
$("#mainNavBtnTransactionsWrapper").addClass("iconSelected");
break;
case "markets":
$("#mainNavBtnMarketsWrapper").addClass("iconSelected");
break;
case "settings":
$("#mainNavBtnSettingsWrapper").addClass("iconSelected");
break;
default: // do nothing for now
}
}
getAppState() {
return this.appState;
}
showGeneralError(errorText) {
$("#txtGeneralError").html(errorText);
// create and open the dialog
$("#dlgGeneralError").iziModal();
$("#dlgGeneralError").iziModal("open");
$("#btnGeneralErrorOK").click(function () {
$("#dlgGeneralError").iziModal("close");
});
}
showGeneralConfirmation(confirmText, callback) {
$("#txtGeneralConfirm").html(confirmText);
// create and open the dialog
$("#dlgGeneralConfirm").iziModal();
$("#dlgGeneralConfirm").iziModal("open");
$("#btnGeneralConfirmYes").click(function () {
$("#dlgGeneralConfirm").iziModal("close");
callback(true);
});
$("#btnGeneralConfirmNo").click(function () {
$("#dlgGeneralConfirm").iziModal("close");
callback(false);
});
}
showAboutDialog(infoData) {
$("#versionNumber").html(infoData.version);
// create and open the dialog
$("#dlgAboutInfo").iziModal();
$("#dlgAboutInfo").iziModal("open");
$("#urlOpenLicence, #urlOpenGitHub").off("click").on("click", function (even) {
event.preventDefault();
ipcRenderer.send("openURL", $(this).attr("href"));
});
$("#btnAboutInfoClose").off("click").on("click", function (even) {
$("#dlgAboutInfo").iziModal("close");
});
}
renderTemplate(template, data, container) {
var template = Handlebars.compile(ipcRenderer.sendSync("getTemplateContent", template));
if (!container) {
container = $("#mainContent");
}
changeAppState(newState) {
this.appState = newState;
$(".sidebarIconWrapper").removeClass("iconSelected");
container.empty();
container.html(template(data));
}
switch(this.appState) {
case "account":
$("#mainNavBtnWalletsWrapper").addClass("iconSelected");
break;
case "addressBook":
$("#mainNavBtnAddressBoookWrapper").addClass("iconSelected");
break;
case "send":
$("#mainNavBtnSendWrapper").addClass("iconSelected");
break;
case "transactions":
$("#mainNavBtnTransactionsWrapper").addClass("iconSelected");
break;
case "markets":
$("#mainNavBtnMarketsWrapper").addClass("iconSelected");
break;
case "settings":
$("#mainNavBtnSettingsWrapper").addClass("iconSelected");
break;
default: // do nothing for now
}
}
getAppState() {
return this.appState;
}
showGeneralError(errorText) {
$("#txtGeneralError").html(errorText);
// create and open the dialog
$("#dlgGeneralError").iziModal();
$('#dlgGeneralError').iziModal('open');
$("#btnGeneralErrorOK").click(function() {
$('#dlgGeneralError').iziModal('close');
});
}
showGeneralConfirmation(confirmText, callback) {
$("#txtGeneralConfirm").html(confirmText);
// create and open the dialog
$("#dlgGeneralConfirm").iziModal();
$('#dlgGeneralConfirm').iziModal('open');
$("#btnGeneralConfirmYes").click(function() {
$('#dlgGeneralConfirm').iziModal('close');
callback(true);
});
$("#btnGeneralConfirmNo").click(function() {
$('#dlgGeneralConfirm').iziModal('close');
callback(false);
});
}
showAboutDialog(infoData) {
$("#versionNumber").html(infoData.version);
// create and open the dialog
$("#dlgAboutInfo").iziModal();
$('#dlgAboutInfo').iziModal('open');
$("#urlOpenLicence, #urlOpenGitHub").off("click").on("click", function(even) {
event.preventDefault();
ipcRenderer.send('openURL', $(this).attr("href"));
});
$("#btnAboutInfoClose").off("click").on("click", function(even) {
$('#dlgAboutInfo').iziModal('close');
});
}
renderTemplate(template, data, container) {
var template = Handlebars.compile(ipcRenderer.sendSync('getTemplateContent', template));
if (!container) {
container = $("#mainContent")
}
container.empty();
container.html(template(data));
}
copyToClipboard(text) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val(text).select();
document.execCommand("copy");
$temp.remove();
}
copyToClipboard(text) {
var $temp = $("<input>");
$("body").append($temp);
$temp.val(text).select();
document.execCommand("copy");
$temp.remove();
}
}
ipcRenderer.on('showAboutDialog', function(event, message) {
EthoMainGUI.showAboutDialog(message);
ipcRenderer.on("showAboutDialog", function (event, message) {
EthoMainGUI.showAboutDialog(message);
});
$("#mainNavBtnTransactions").click(function() {
EthoTransactions.clearFilter();
EthoMainGUI.changeAppState("transactions");
EthoTransactions.renderTransactions();
});
$("#mainNavBtnTransactions").click(function () {
EthoTransactions.clearFilter();
EthoMainGUI.changeAppState("transactions");
EthoTransactions.renderTransactions();
});
$("#mainNavBtnAddressBoook").click(function() {
EthoMainGUI.changeAppState("addressBook");
EthoAddressBook.renderAddressBook();
});
$("#mainNavBtnAddressBoook").click(function () {
EthoMainGUI.changeAppState("addressBook");
EthoAddressBook.renderAddressBook();
});
$("#mainNavBtnSend").click(function() {
EthoMainGUI.changeAppState("send");
EthoSend.renderSendState();
});
$("#mainNavBtnSend").click(function () {
EthoMainGUI.changeAppState("send");
EthoSend.renderSendState();
});
$("#mainNavBtnWallets").click(function() {
EthoMainGUI.changeAppState("account");
EthoWallets.renderWalletsState();
});
$("#mainNavBtnWallets").click(function () {
EthoMainGUI.changeAppState("account");
EthoWallets.renderWalletsState();
});
$("#mainNavBtnMarkets").click(function() {
EthoMainGUI.changeAppState("markets");
EthoMarkets.renderMarkets();
});
$("#mainNavBtnMarkets").click(function () {
EthoMainGUI.changeAppState("markets");
EthoMarkets.renderMarkets();
});
$("#mainNavBtnSettings").click(function() {
EthoMainGUI.changeAppState("settings");
EthoSettings.renderSettingsState();
});
$("#mainNavBtnSettings").click(function () {
EthoMainGUI.changeAppState("settings");
EthoSettings.renderSettingsState();
});
EthoMainGUI = new MainGUI();

View File

@@ -1,69 +1,75 @@
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class Markets {
constructor() {}
constructor() {}
renderMarkets() {
EthoMainGUI.renderTemplate("markets.html", {});
$(document).trigger("render_markets");
renderMarkets() {
EthoMainGUI.renderTemplate("markets.html", {});
$(document).trigger("render_markets");
$.getJSON("https://api.coingecko.com/api/v3/coins/ether-1?sparkline=true", function( data ) {
$("#ETHOToUSD").html(data.market_data.current_price.usd.toFixed(5) + " $");
$("#ETHOToBTC").html(data.market_data.current_price.btc.toFixed(8)) + " sats";
$("#marketcap").html(data.market_data.market_cap.usd.toFixed(0) + " $ (" + data.market_cap_rank + ")");
$("#dailyVolume").html(data.market_data.total_volume.usd.toFixed(0) + " $");
$.getJSON("https://api.coingecko.com/api/v3/coins/ether-1?sparkline=true", function (data) {
$("#ETHOToUSD").html(data.market_data.current_price.usd.toFixed(5) + " $");
$("#ETHOToBTC").html(data.market_data.current_price.btc.toFixed(8)) + " sats";
$("#marketcap").html(data.market_data.market_cap.usd.toFixed(0) + " $ (" + data.market_cap_rank + ")");
$("#dailyVolume").html(data.market_data.total_volume.usd.toFixed(0) + " $");
$("#changeUSD").html("7 days change: " + data.market_data.price_change_percentage_7d_in_currency.usd.toFixed(2) + "%");
$("#changeBTC").html("7 days change: " + data.market_data.price_change_percentage_7d_in_currency.btc.toFixed(2) + "%");
$("#changeMarketcap").html("high 24h: " + data.market_data.high_24h.usd.toFixed(5) + " $");
$("#changeVolume").html("all time high: " + data.market_data.ath.usd.toFixed(5) + " $");
$("#changeUSD").html("7 days change: " + data.market_data.price_change_percentage_7d_in_currency.usd.toFixed(2) + "%");
$("#changeBTC").html("7 days change: " + data.market_data.price_change_percentage_7d_in_currency.btc.toFixed(2) + "%");
$("#changeMarketcap").html("high 24h: " + data.market_data.high_24h.usd.toFixed(5) + " $");
$("#changeVolume").html("all time high: " + data.market_data.ath.usd.toFixed(5) + " $");
new Chart(document.getElementById('chartMarketPriceCanvas'), {
type: 'line',
data: {
labels: data.market_data.sparkline_7d.price,
datasets: [{
data: data.market_data.sparkline_7d.price,
backgroundColor: 'rgb(122,19,54,0.1)',
fill: true,
borderWidth: 3,
pointRadius: 0,
borderColor: '#7A1336'
}]
new Chart(document.getElementById("chartMarketPriceCanvas"), {
type: "line",
data: {
labels: data.market_data.sparkline_7d.price,
datasets: [
{
data: data.market_data.sparkline_7d.price,
backgroundColor: "rgb(122,19,54,0.1)",
fill: true,
borderWidth: 3,
pointRadius: 0,
borderColor: "#7A1336"
}
]
},
options: {
animation: false,
responsive: true,
maintainAspectRatio: false,
legend: {
display: false,
labels: {
display: false
}
},
scales: {
yAxes: [
{
ticks: {
maxTicksLimit: 5,
beginAtZero: true,
fontSize: 10,
callback: function (value, index, values) {
return value.toFixed(2) + " $";
}
},
options: {
animation: false,
responsive: true,
maintainAspectRatio: false,
legend: {
display: false,
labels: {
display: false
}
},
scales: {
yAxes: [{
ticks: {
maxTicksLimit: 5,
beginAtZero:true,
fontSize: 10,
callback: function(value, index, values) {
return value.toFixed(2) + ' $';
}
},
gridLines: {
color: 'rgba(255,255,255,.08)'
}
}],
xAxes: [{
display: false
}]
}
gridLines: {
color: "rgba(255,255,255,.08)"
}
});
});
}
}
],
xAxes: [
{
display: false
}
]
}
}
});
});
}
}
// create new markets variable
EthoMarkets = new Markets();
EthoMarkets = new Markets();

View File

@@ -1,244 +1,210 @@
// In renderer process (web page).
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class SendTransaction {
constructor() {}
constructor() {}
renderSendState() {
EthoBlockchain.getAccountsData(
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(data) {
EthoMainGUI.renderTemplate("send.html", data);
$(document).trigger("render_send");
}
);
renderSendState() {
EthoBlockchain.getAccountsData(function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
EthoMainGUI.renderTemplate("send.html", data);
$(document).trigger("render_send");
});
}
validateSendForm() {
if (EthoMainGUI.getAppState() == "send") {
if (!$("#sendFromAddress").val()) {
EthoMainGUI.showGeneralError("Sender address must be specified!");
return false;
}
if (!EthoBlockchain.isAddress($("#sendFromAddress").val())) {
EthoMainGUI.showGeneralError("Sender address must be a valid address!");
return false;
}
if (!$("#sendToAddress").val()) {
EthoMainGUI.showGeneralError("Recipient address must be specified!");
return false;
}
if (!EthoBlockchain.isAddress($("#sendToAddress").val())) {
EthoMainGUI.showGeneralError("Recipient address must be a valid address!");
return false;
}
if (Number($("#sendAmmount").val()) <= 0) {
EthoMainGUI.showGeneralError("Send ammount must be greater then zero!");
return false;
}
return true;
} else {
return false;
}
}
validateSendForm() {
if (EthoMainGUI.getAppState() == "send") {
if (!$("#sendFromAddress").val()) {
EthoMainGUI.showGeneralError("Sender address must be specified!");
return false;
}
if (!EthoBlockchain.isAddress($("#sendFromAddress").val())) {
EthoMainGUI.showGeneralError("Sender address must be a valid address!");
return false;
}
if (!$("#sendToAddress").val()) {
EthoMainGUI.showGeneralError("Recipient address must be specified!");
return false;
}
if (!EthoBlockchain.isAddress($("#sendToAddress").val())) {
EthoMainGUI.showGeneralError("Recipient address must be a valid address!");
return false;
}
if (Number($("#sendAmmount").val()) <= 0) {
EthoMainGUI.showGeneralError("Send ammount must be greater then zero!");
return false;
}
return true;
} else {
return false;
}
}
resetSendForm() {
if (EthoMainGUI.getAppState() == "send") {
$("#sendToAddressName").html("");
$("#sendToAddress").val("");
$("#sendAmmount").val(0);
}
resetSendForm() {
if (EthoMainGUI.getAppState() == "send") {
$("#sendToAddressName").html("");
$("#sendToAddress").val("");
$("#sendAmmount").val(0);
}
}
}
$(document).on("render_send", function() {
$('select').formSelect( {classes: "fromAddressSelect"});
$("#sendFromAddress").on("change", function() {
var optionText = $(this).find("option:selected").text();
var addrName = optionText.substr(0, optionText.indexOf('-'));
var addrValue = optionText.substr(optionText.indexOf("-") + 1);
$(".fromAddressSelect input").val(addrValue.trim());
$("#sendFromAddressName").html(addrName.trim());
$(document).on("render_send", function () {
$("select").formSelect({classes: "fromAddressSelect"});
web3Local.eth.getBalance(this.value, function(error, balance) {
$("#sendMaxAmmount").html(parseFloat(web3Local.utils.fromWei(balance, 'ether')));
});
});
$("#sendFromAddress").on("change", function () {
var optionText = $(this).find("option:selected").text();
var addrName = optionText.substr(0, optionText.indexOf("-"));
var addrValue = optionText.substr(optionText.indexOf("-") + 1);
$(".fromAddressSelect input").val(addrValue.trim());
$("#sendFromAddressName").html(addrName.trim());
$("#btnSendAll").off('click').on('click', function() {
$("#sendAmmount").focus();
$("#sendAmmount").val($("#sendMaxAmmount").html());
web3Local.eth.getBalance(this.value, function (error, balance) {
$("#sendMaxAmmount").html(parseFloat(web3Local.utils.fromWei(balance, "ether")));
});
$("#sendToAddress").off('input').on('input', function() {
var addressName = null;
$("#sendToAddressName").html("");
addressName = EthoAddressBook.getAddressName($("#sendToAddress").val());
});
if (!addressName) {
var wallets = EthoDatatabse.getWallets();
addressName = wallets.names[$("#sendToAddress").val()];
$("#btnSendAll").off("click").on("click", function () {
$("#sendAmmount").focus();
$("#sendAmmount").val($("#sendMaxAmmount").html());
});
$("#sendToAddress").off("input").on("input", function () {
var addressName = null;
$("#sendToAddressName").html("");
addressName = EthoAddressBook.getAddressName($("#sendToAddress").val());
if (!addressName) {
var wallets = EthoDatatabse.getWallets();
addressName = wallets.names[$("#sendToAddress").val()];
}
$("#sendToAddressName").html(addressName);
});
$("#btnLookForToAddress").off("click").on("click", function () {
EthoBlockchain.getAddressListData(function (error) {
EthoMainGUI.showGeneralError(error);
}, function (addressList) {
var addressBook = EthoAddressBook.getAddressList();
for (var key in addressBook) {
if (addressBook.hasOwnProperty(key)) {
var adddressObject = {};
adddressObject.address = key;
adddressObject.name = addressBook[key];
addressList.addressData.push(adddressObject);
}
$("#sendToAddressName").html(addressName);
}
$("#dlgAddressList").iziModal({width: "800px"});
EthoMainGUI.renderTemplate("addresslist.html", addressList, $("#dlgAddressListBody"));
$("#dlgAddressList").iziModal("open");
$(".btnSelectToAddress").off("click").on("click", function () {
$("#sendToAddressName").html($(this).attr("data-name"));
$("#sendToAddress").val($(this).attr("data-wallet"));
$("#dlgAddressList").iziModal("close");
});
$("#addressListFilter").off("input").on("input", function (e) {
EthoUtils.filterTable($("#addressTable"), $("#addressListFilter").val());
});
$("#btnClearSearchField").off("click").on("click", function () {
EthoUtils.filterTable($("#addressTable"), "");
$("#addressListFilter").val("");
});
});
$("#btnLookForToAddress").off('click').on('click', function() {
EthoBlockchain.getAddressListData(
function(error) {
});
$("#btnAddToAddressBook").off("click").on("click", function () {
if (EthoBlockchain.isAddress($("#sendToAddress").val())) {
$("#dlgAddAddressToBook").iziModal();
$("#inputAddressName").val("");
$("#dlgAddAddressToBook").iziModal("open");
function doAddAddressToAddressBook() {
EthoAddressBook.setAddressName($("#sendToAddress").val(), $("#inputAddressName").val());
$("#dlgAddAddressToBook").iziModal("close");
iziToast.success({title: "Success", message: "Address was added to address book", position: "topRight", timeout: 2000});
}
} else {
EthoMainGUI.showGeneralError("Recipient address is not valid!");
}
$("#btnAddAddressToBookConfirm").off("click").on("click", function () {
doAddAddressToAddressBook();
});
$("#dlgAddAddressToBook").off("keypress").on("keypress", function (e) {
if (e.which == 13) {
doAddAddressToAddressBook();
}
});
});
$("#btnSendTransaction").off("click").on("click", function () {
if (EthoSend.validateSendForm()) {
EthoBlockchain.getTranasctionFee($("#sendFromAddress").val(), $("#sendToAddress").val(), $("#sendAmmount").val(), function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
$("#dlgSendWalletPassword").iziModal();
$("#walletPassword").val("");
$("#fromAddressInfo").html($("#sendFromAddress").val());
$("#toAddressInfo").html($("#sendToAddress").val());
$("#valueToSendInfo").html($("#sendAmmount").val());
$("#feeToPayInfo").html(parseFloat(web3Local.utils.fromWei(data.toString(), "ether")));
$("#dlgSendWalletPassword").iziModal("open");
function doSendTransaction() {
$("#dlgSendWalletPassword").iziModal("close");
EthoBlockchain.prepareTransaction($("#walletPassword").val(), $("#sendFromAddress").val(), $("#sendToAddress").val(), $("#sendAmmount").val(), function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
EthoBlockchain.sendTransaction(data.raw, function (error) {
EthoMainGUI.showGeneralError(error);
},
function(addressList) {
var addressBook = EthoAddressBook.getAddressList();
}, function (data) {
EthoSend.resetSendForm();
for (var key in addressBook) {
if (addressBook.hasOwnProperty(key)) {
var adddressObject = {};
adddressObject.address = key
adddressObject.name = addressBook[key];
addressList.addressData.push(adddressObject);
}
}
$("#dlgAddressList").iziModal({ width: "800px" });
EthoMainGUI.renderTemplate("addresslist.html", addressList, $("#dlgAddressListBody"));
$('#dlgAddressList').iziModal('open');
iziToast.success({title: "Sent", message: "Transaction was successfully sent to the chain", position: "topRight", timeout: 5000});
$(".btnSelectToAddress").off('click').on('click', function() {
$("#sendToAddressName").html($(this).attr('data-name'));
$("#sendToAddress").val($(this).attr('data-wallet'));
$('#dlgAddressList').iziModal('close');
EthoBlockchain.getTransaction(data, function (error) {
EthoMainGUI.showGeneralError(error);
}, function (transaction) {
ipcRenderer.send("storeTransaction", {
block: transaction.blockNumber,
txhash: transaction.hash.toLowerCase(),
fromaddr: transaction.from.toLowerCase(),
timestamp: moment().format("YYYY-MM-DD HH:mm:ss"),
toaddr: transaction.to.toLowerCase(),
value: transaction.value
});
$('#addressListFilter').off('input').on('input',function(e){
EthoUtils.filterTable($("#addressTable"), $('#addressListFilter').val());
});
$("#btnClearSearchField").off('click').on('click', function() {
EthoUtils.filterTable($("#addressTable"), "");
$('#addressListFilter').val("")
});
}
);
});
$("#btnAddToAddressBook").off('click').on('click', function() {
if (EthoBlockchain.isAddress($("#sendToAddress").val())) {
$("#dlgAddAddressToBook").iziModal();
$("#inputAddressName").val("");
$('#dlgAddAddressToBook').iziModal('open');
function doAddAddressToAddressBook() {
EthoAddressBook.setAddressName($("#sendToAddress").val(), $("#inputAddressName").val());
$('#dlgAddAddressToBook').iziModal('close');
iziToast.success({
title: 'Success',
message: 'Address was added to address book',
position: 'topRight',
timeout: 2000
});
}
} else {
EthoMainGUI.showGeneralError("Recipient address is not valid!");
});
});
});
}
$("#btnAddAddressToBookConfirm").off('click').on('click', function() {
doAddAddressToAddressBook();
$("#btnSendWalletPasswordConfirm").off("click").on("click", function () {
doSendTransaction();
});
$("#dlgAddAddressToBook").off('keypress').on('keypress', function(e) {
if(e.which == 13) {
doAddAddressToAddressBook();
}
});
});
$("#btnSendTransaction").off('click').on('click', function() {
if (EthoSend.validateSendForm()) {
EthoBlockchain.getTranasctionFee($("#sendFromAddress").val(), $("#sendToAddress").val(), $("#sendAmmount").val(),
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(data) {
$("#dlgSendWalletPassword").iziModal();
$("#walletPassword").val("");
$("#fromAddressInfo").html($("#sendFromAddress").val());
$("#toAddressInfo").html($("#sendToAddress").val());
$("#valueToSendInfo").html($("#sendAmmount").val());
$("#feeToPayInfo").html(parseFloat(web3Local.utils.fromWei(data.toString(), 'ether')));
$('#dlgSendWalletPassword').iziModal('open');
function doSendTransaction() {
$('#dlgSendWalletPassword').iziModal('close');
EthoBlockchain.prepareTransaction(
$("#walletPassword").val(),
$("#sendFromAddress").val(),
$("#sendToAddress").val(),
$("#sendAmmount").val(),
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(data) {
EthoBlockchain.sendTransaction(data.raw,
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(data) {
EthoSend.resetSendForm();
iziToast.success({
title: 'Sent',
message: 'Transaction was successfully sent to the chain',
position: 'topRight',
timeout: 5000
});
EthoBlockchain.getTransaction(data,
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(transaction) {
ipcRenderer.send('storeTransaction', {
block: transaction.blockNumber,
txhash: transaction.hash.toLowerCase(),
fromaddr: transaction.from.toLowerCase(),
timestamp: moment().format('YYYY-MM-DD HH:mm:ss'),
toaddr: transaction.to.toLowerCase(),
value: transaction.value
});
}
);
}
);
}
);
}
$("#btnSendWalletPasswordConfirm").off('click').on('click', function() {
doSendTransaction();
});
$("#dlgSendWalletPassword").off('keypress').on('keypress', function(e) {
if(e.which == 13) {
doSendTransaction();
}
});
}
);
}
});
$("#dlgSendWalletPassword").off("keypress").on("keypress", function (e) {
if (e.which == 13) {
doSendTransaction();
}
});
});
}
});
});
// create new account variable
EthoSend = new SendTransaction();
EthoSend = new SendTransaction();

View File

@@ -1,107 +1,88 @@
// In renderer process (web page).
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class Settings {
constructor() {}
constructor() {}
renderSettingsState() {
EthoMainGUI.renderTemplate("settings.html", {});
$(document).trigger("render_settings");
}
renderSettingsState() {
EthoMainGUI.renderTemplate("settings.html", {});
$(document).trigger("render_settings");
}
}
$(document).on("render_settings", function() {
$("#btnSettingsCleanTransactions").off('click').on('click', function() {
if (isFullySynced) {
EthoMainGUI.showGeneralConfirmation("Do you really want to resync transactions?", function(result) {
if (result) {
if (EthoTransactions.getIsSyncing()) {
EthoMainGUI.showGeneralError("Transactions sync is currently in progress");
} else {
// first disable keepInSync
EthoTransactions.disableKeepInSync();
// then delete the transactions data
var counters = EthoDatatabse.getCounters();
counters.transactions = 0;
EthoDatatabse.setCounters(counters);
ipcResult = ipcRenderer.sendSync('deleteTransactions', null);
if (ipcResult.success) {
// sync all the transactions to the current block
web3Local.eth.getBlock("latest", function(error, localBlock) {
if (error) {
EthoMainGUI.showGeneralError(error);
} else {
EthoTransactions.enableKeepInSync();
EthoTransactions.syncTransactionsForAllAddresses(localBlock.number);
iziToast.success({
title: 'Success',
message: 'Transactions are being resynced',
position: 'topRight',
timeout: 5000
});
}
});
} else {
EthoMainGUI.showGeneralError("Error resyncing transactions: " + ipcResult.error);
}
}
}
});
} else {
iziToast.info({
title: 'Wait...',
message: 'You need to be fully sync before cleaning transactions',
position: 'topRight',
timeout: 5000
});
}
});
$(document).on("render_settings", function () {
$("#btnSettingsCleanTransactions").off("click").on("click", function () {
if (isFullySynced) {
EthoMainGUI.showGeneralConfirmation("Do you really want to resync transactions?", function (result) {
if (result) {
if (EthoTransactions.getIsSyncing()) {
EthoMainGUI.showGeneralError("Transactions sync is currently in progress");
} else {
// first disable keepInSync
EthoTransactions.disableKeepInSync();
// then delete the transactions data
var counters = EthoDatatabse.getCounters();
counters.transactions = 0;
EthoDatatabse.setCounters(counters);
ipcResult = ipcRenderer.sendSync("deleteTransactions", null);
$("#btnSettingsCleanWallets").off('click').on('click', function() {
EthoMainGUI.showGeneralConfirmation("Do you really want to delete wallets data?", function(result) {
if (result) {
ipcResult = ipcRenderer.sendSync('deleteWalletData', null);
if (ipcResult.success) {
iziToast.success({
title: 'Success',
message: 'Wallet names were succesfully cleaned',
position: 'topRight',
timeout: 5000
});
if (ipcResult.success) {
// sync all the transactions to the current block
web3Local.eth.getBlock("latest", function (error, localBlock) {
if (error) {
EthoMainGUI.showGeneralError(error);
} else {
EthoMainGUI.showGeneralError("Error clearing wallet names: " + ipcResult.error);
EthoTransactions.enableKeepInSync();
EthoTransactions.syncTransactionsForAllAddresses(localBlock.number);
iziToast.success({title: "Success", message: "Transactions are being resynced", position: "topRight", timeout: 5000});
}
});
} else {
EthoMainGUI.showGeneralError("Error resyncing transactions: " + ipcResult.error);
}
});
});
}
}
});
} else {
iziToast.info({title: "Wait...", message: "You need to be fully sync before cleaning transactions", position: "topRight", timeout: 5000});
}
});
$("#btnSettingsCleanBlockchain").off('click').on('click', function() {
EthoMainGUI.showGeneralConfirmation("Do you really want to delete the blockchain data? Wallet will close and you will need to restart it!", function(result) {
if (result) {
var loading_screen = pleaseWait({
logo: "assets/images/logo.png",
backgroundColor: '#000000',
loadingHtml: "<div class='spinner'><div class='bounce bounce1'></div><div class='bounce bounce2'></div><div class='bounce bounce3'></div></div><div class='loadingText'>Deleting blockchain data, wallet will automatically close, please wait...</div>"
});
setTimeout(() => {
// first stop the geth process
ipcResult = ipcRenderer.send('stopGeth', null);
$("#btnSettingsCleanWallets").off("click").on("click", function () {
EthoMainGUI.showGeneralConfirmation("Do you really want to delete wallets data?", function (result) {
if (result) {
ipcResult = ipcRenderer.sendSync("deleteWalletData", null);
setTimeout(() => {
// delete the blockchain date async and wait for 5 seconds
ipcResult = ipcRenderer.sendSync('deleteBlockchainData', null);
// finally quit the application
ipcResult = ipcRenderer.send('appQuit', null);
}, 5000);
}, 2000);
}
});
if (ipcResult.success) {
iziToast.success({title: "Success", message: "Wallet names were succesfully cleaned", position: "topRight", timeout: 5000});
} else {
EthoMainGUI.showGeneralError("Error clearing wallet names: " + ipcResult.error);
}
}
});
});
$("#btnSettingsCleanBlockchain").off("click").on("click", function () {
EthoMainGUI.showGeneralConfirmation("Do you really want to delete the blockchain data? Wallet will close and you will need to restart it!", function (result) {
if (result) {
var loading_screen = pleaseWait({logo: "assets/images/logo.png", backgroundColor: "#000000", loadingHtml: "<div class='spinner'><div class='bounce bounce1'></div><div class='bounce bounce2'></div><div class='bounce bounce3'></div></div><div class='loadingText'>Deleting blockchain data, wallet will automatically close, please wait...</div>"});
setTimeout(() => {
// first stop the geth process
ipcResult = ipcRenderer.send("stopGeth", null);
setTimeout(() => {
// delete the blockchain date async and wait for 5 seconds
ipcResult = ipcRenderer.sendSync("deleteBlockchainData", null);
// finally quit the application
ipcResult = ipcRenderer.send("appQuit", null);
}, 5000);
}, 2000);
}
});
});
});
// create new settings variable
EthoSettings = new Settings();
EthoSettings = new Settings();

View File

@@ -1,18 +1,17 @@
// In renderer process (web page).
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
// Set the provider you want from Web3.providers
SyncProgress = new ProgressBar.Line('#syncProgress',
{
SyncProgress = new ProgressBar.Line("#syncProgress", {
strokeWidth: 6,
easing: 'easeInOut',
easing: "easeInOut",
duration: 1400,
color: "#7A1336",
trailColor: '#eee',
trailColor: "#eee",
trailWidth: 1,
text: {
style: {
color: '#bbb',
color: "#bbb",
position: "absolute",
left: "50%",
top: "-1px",
@@ -23,107 +22,113 @@ SyncProgress = new ProgressBar.Line('#syncProgress',
},
autoStyleContainer: false
},
from: {color: '#FFEA82'},
to: {color: '#ED6A5A'}
from: {
color: "#FFEA82"
},
to: {
color: "#ED6A5A"
}
});
// set initial value for the progress text
SyncProgress.setText("Waiting for blockchain, please wait...");
isFullySynced = false;
var peerCountInterval = setInterval(function()
{
web3Local.eth.net.getPeerCount(function(error, count) {
var peerCountInterval = setInterval(function () {
web3Local.eth.net.getPeerCount(function (error, count) {
$("#peerCount").html(vsprintf("Peer Count: %d", [count]));
});
}, 5000);
}, 5000);
function StartSyncProcess() {
var alreadyCatchedUp = false;
var nodeSyncInterval = null;
var subscription = web3Local.eth.subscribe('syncing', function(error, sync){
var subscription = web3Local.eth.subscribe("syncing", function (error, sync) {
if (!error) {
if (!sync) {
if (nodeSyncInterval) {
clearInterval(nodeSyncInterval);
clearInterval(nodeSyncInterval);
}
nodeSyncInterval = setInterval(function()
{
web3Local.eth.getBlock("latest", function(error, localBlock) {
nodeSyncInterval = setInterval(function () {
web3Local.eth.getBlock("latest", function (error, localBlock) {
if (!error) {
if (localBlock.number > 0) {
if (!EthoTransactions.getIsSyncing()) {
SyncProgress.animate(1);
SyncProgress.setText(vsprintf('%d/%d (100%%)', [localBlock.number, localBlock.number]));
SyncProgress.animate(1);
SyncProgress.setText(vsprintf("%d/%d (100%%)", [localBlock.number, localBlock.number]));
}
if (alreadyCatchedUp == false)
{
if (alreadyCatchedUp == false) {
// clear the repeat interval and render wallets
$(document).trigger("onNewAccountTransaction");
alreadyCatchedUp = true;
isFullySynced = true;
// enable the keep in sync feature
EthoTransactions.enableKeepInSync();
// sync all the transactions to the current block
EthoTransactions.syncTransactionsForAllAddresses(localBlock.number);
// signal that the sync is complete
$(document).trigger("onSyncComplete");
}
}
}
}
} else {
EthoMainGUI.showGeneralError(error);
}
});
}, 10000);
});
}, 10000);
}
} else {
EthoMainGUI.showGeneralError(error);
}
}).on("data", function(sync){
if ((sync) && (sync.HighestBlock > 0)) {
}).on("data", function (sync) {
if (sync && sync.HighestBlock > 0) {
SyncProgress.animate(sync.CurrentBlock / sync.HighestBlock);
SyncProgress.setText(vsprintf('%d/%d (%d%%)', [sync.CurrentBlock, sync.HighestBlock, Math.floor(sync.CurrentBlock / sync.HighestBlock * 100)]));
SyncProgress.setText(vsprintf("%d/%d (%d%%)", [
sync.CurrentBlock,
sync.HighestBlock,
Math.floor(sync.CurrentBlock / sync.HighestBlock * 100)
]));
}
}).on("changed", function(isSyncing){
if(isSyncing) {
nodeSyncInterval = setInterval(function()
{
web3Local.eth.isSyncing(function(error, sync){
if ((!error) && (sync)) {
}).on("changed", function (isSyncing) {
if (isSyncing) {
nodeSyncInterval = setInterval(function () {
web3Local.eth.isSyncing(function (error, sync) {
if (!error && sync) {
SyncProgress.animate(sync.currentBlock / sync.highestBlock);
SyncProgress.setText(vsprintf('%d/%d (%d%%)', [sync.currentBlock, sync.highestBlock, Math.floor(sync.currentBlock / sync.highestBlock * 100)]));
SyncProgress.setText(vsprintf("%d/%d (%d%%)", [
sync.currentBlock,
sync.highestBlock,
Math.floor(sync.currentBlock / sync.highestBlock * 100)
]));
} else if (error) {
EthoMainGUI.showGeneralError(error);
}
});
}, 2000);
});
}, 2000);
} else {
if (nodeSyncInterval) {
clearInterval(nodeSyncInterval);
clearInterval(nodeSyncInterval);
}
}
});
});
}
var InitWeb3 = setInterval(function()
{
var InitWeb3 = setInterval(function () {
try {
web3Local = new Web3(new Web3.providers.WebsocketProvider('ws://localhost:8546'));
web3Local = new Web3(new Web3.providers.WebsocketProvider("ws://localhost:8546"));
web3Local.eth.net.isListening(function(error, success) {
web3Local.eth.net.isListening(function (error, success) {
if (!error) {
$(document).trigger("onGethReady");
clearInterval(InitWeb3);
StartSyncProcess();
StartSyncProcess();
}
});
}
catch(err) {
} catch (err) {
EthoMainGUI.showGeneralError(err);
}
}, 2000);
}, 2000);

View File

@@ -1,83 +1,84 @@
class tableTransactions {
constructor() {
this.appState = "account";
}
constructor() {
this.appState = "account";
}
initialize(id, data) {
// register the sort datetime format
$.fn.dataTable.moment('MMM Do YYYY HH:mm:ss');
initialize(id, data) {
// register the sort datetime format
$.fn.dataTable.moment("MMM Do YYYY HH:mm:ss");
var namesType = $.fn.dataTable.absoluteOrderNumber(
[
{ value: null, position: 'top' }
]);
// render the transactions
$(id).DataTable({
"dom": 'Bfrtip',
"paging": false,
"scrollY": "calc(100vh - 115px)",
"responsive": true,
"processing": true,
"order": [[ 1, "desc" ]],
"data": data,
"oSearch": {"sSearch": EthoTransactions.getFilter() },
"buttons":
[
{
text: '<i class="fas fa-sync-alt"></i>',
action: function ( e, dt, node, config ) {
EthoTransactions.renderTransactions();
}
}
],
"columnDefs": [
{
"targets": 0,
"render": function ( data, type, row ) {
if (data == 0) {
return '<i class="fas fa-arrow-left"></i>';
} else if (data == 1) {
return '<i class="fas fa-arrow-right"></i>';
} else {
return '<i class="fas fa-arrows-alt-h"></i>';
}
}
},
{
"className": "transactionsBlockNum",
"type": namesType,
"targets": 1
},
{
"targets": 2,
"render": function ( data, type, row ) {
return moment(data, "YYYY-MM-DD HH:mm:ss").format("MMM Do YYYY HH:mm:ss");
}
},
{
"targets": 5,
"render": function ( data, type, row ) {
return parseFloat(web3Local.utils.fromWei(EthoUtils.toFixed(parseFloat(data)).toString(), 'ether')).toFixed(2);
}
},
{
"targets": 6,
"defaultContent": "",
"render": function ( data, type, row ) {
if (row[1]) {
return '<i class="fas fa-check"></i>';
} else {
return '<i class="fas fa-question"></i>';
}
}
}
],
"drawCallback": function( settings ) {
$("#loadingTransactionsOverlay").css("display", "none");
var namesType = $.fn.dataTable.absoluteOrderNumber([
{
value: null,
position: "top"
}
]);
// render the transactions
$(id).DataTable({
dom: "Bfrtip",
paging: false,
scrollY: "calc(100vh - 115px)",
responsive: true,
processing: true,
order: [
[1, "desc"]
],
data: data,
oSearch: {
sSearch: EthoTransactions.getFilter()
},
buttons: [
{
text: '<i class="fas fa-sync-alt"></i>',
action: function (e, dt, node, config) {
EthoTransactions.renderTransactions();
}
}
],
columnDefs: [
{
targets: 0,
render: function (data, type, row) {
if (data == 0) {
return '<i class="fas fa-arrow-left"></i>';
} else if (data == 1) {
return '<i class="fas fa-arrow-right"></i>';
} else {
return '<i class="fas fa-arrows-alt-h"></i>';
}
});
}
}
}, {
className: "transactionsBlockNum",
type: namesType,
targets: 1
}, {
targets: 2,
render: function (data, type, row) {
return moment(data, "YYYY-MM-DD HH:mm:ss").format("MMM Do YYYY HH:mm:ss");
}
}, {
targets: 5,
render: function (data, type, row) {
return parseFloat(web3Local.utils.fromWei(EthoUtils.toFixed(parseFloat(data)).toString(), "ether")).toFixed(2);
}
}, {
targets: 6,
defaultContent: "",
render: function (data, type, row) {
if (row[1]) {
return '<i class="fas fa-check"></i>';
} else {
return '<i class="fas fa-question"></i>';
}
}
}
],
drawCallback: function (settings) {
$("#loadingTransactionsOverlay").css("display", "none");
}
});
}
}
// create new tables variable
EthoTableTransactions = new tableTransactions();
EthoTableTransactions = new tableTransactions();

View File

@@ -1,183 +1,174 @@
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class Transactions {
constructor() {
this.filter = "";
this.isSyncing = false;
this.isLoading = false;
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://richlist.ether1.org/transactions_list.php" + params, function (result) {
result.data.forEach(element => {
if (element.fromaddr && element.toaddr) {
ipcRenderer.send("storeTransaction", {
block: element.block.toString(),
txhash: element.txhash.toLowerCase(),
fromaddr: element.fromaddr.toLowerCase(),
timestamp: element.timestamp,
toaddr: element.toaddr.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);
}
}
setIsSyncing(value) {
this.isSyncing = value;
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);
}
}
getIsSyncing() {
return this.isSyncing;
}
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("+", "")
};
setIsLoading(value) {
this.isLoading = value;
}
// store transaction and notify about new transactions
ipcRenderer.send("storeTransaction", Transaction);
$(document).trigger("onNewAccountTransaction");
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://richlist.ether1.org/transactions_list.php" + params, function( result ) {
result.data.forEach(element => {
if (element.fromaddr && element.toaddr) {
ipcRenderer.send('storeTransaction', {
block: element.block.toString(),
txhash: element.txhash.toLowerCase(),
fromaddr: element.fromaddr.toLowerCase(),
timestamp: element.timestamp,
toaddr: element.toaddr.toLowerCase(),
value: element.value
});
}
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
});
// 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);
if (EthoMainGUI.getAppState() == "transactions") {
setTimeout(function () {
EthoTransactions.renderTransactions();
}, 500);
}
}
}
);
}
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
}
);
}
disableKeepInSync() {
EthoBlockchain.unsubsribeNewBlockHeaders(function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
// success
});
}
}
// create new transactions variable
EthoTransactions = new Transactions();
EthoTransactions = new Transactions();

View File

@@ -1,57 +1,60 @@
class Utils {
constructor() {}
toFixed(x) {
if (Math.abs(x) < 1.0) {
var e = parseInt(x.toString().split('e-')[1]);
if (e) {
x *= Math.pow(10,e-1);
x = '0.' + (new Array(e)).join('0') + x.toString().substring(2);
}
constructor() {}
toFixed(x) {
if (Math.abs(x) < 1.0) {
var e = parseInt(x.toString().split("e-")[1]);
if (e) {
x *= Math.pow(10, e - 1);
x = "0." + new Array(e).join("0") + x.toString().substring(2);
}
} else {
var e = parseInt(x.toString().split("+")[1]);
if (e > 20) {
e -= 20;
x /= Math.pow(10, e);
x += new Array(e + 1).join("0");
}
}
return x;
}
filterTable(table, text) {
// Declare variables
var filter,
tr,
td,
i,
txtValue;
filter = text.toUpperCase();
tr = $(table).find("tr");
// Loop through all table rows, and hide those who don't match the search query
for (i = 0; i < tr.length; i++) {
td = $(tr[i]).find("td")[0];
if (td) {
txtValue = td.textContent || td.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
$(tr[i]).css("display", "");
} else {
var e = parseInt(x.toString().split('+')[1]);
if (e > 20) {
e -= 20;
x /= Math.pow(10,e);
x += (new Array(e+1)).join('0');
$(tr[i]).css("display", "none");
}
}
return x;
}
filterTable(table, text) {
// Declare variables
var filter, tr, td, i, txtValue;
filter = text.toUpperCase();
tr = $(table).find("tr");
// Loop through all table rows, and hide those who don't match the search query
for (i = 0; i < tr.length; i++) {
td = $(tr[i]).find("td")[0];
if (td) {
txtValue = td.textContent || td.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
$(tr[i]).css("display", "");
} else {
$(tr[i]).css("display", "none");
}
}
}
}
createToolTip(element, text) {
tippy(element, {
content: text,
delay: 500,
arrow: true,
arrowType: 'round',
size: 'large',
duration: 500,
animation: 'scale'
});
}
}
}
createToolTip(element, text) {
tippy(element, {
content: text,
delay: 500,
arrow: true,
arrowType: "round",
size: "large",
duration: 500,
animation: "scale"
});
}
}
EthoUtils = new Utils();
EthoUtils = new Utils();

View File

@@ -1,13 +1,12 @@
const {ipcRenderer} = require('electron');
const {ipcRenderer} = require("electron");
class Wallets {
constructor() {
this.addressList = [];
this.addressList = [];
$.getJSON("https://min-api.cryptocompare.com/data/price?fsym=ETHO&tsyms=USD", function( price )
{
$.getJSON("https://min-api.cryptocompare.com/data/price?fsym=ETHO&tsyms=USD", function (price) {
EthoWallets._setPrice(price.USD);
});
});
}
_getPrice() {
@@ -23,7 +22,7 @@ class Wallets {
}
clearAddressList() {
this.addressList = [];
this.addressList = [];
}
getAddressExists(address) {
@@ -47,111 +46,103 @@ class Wallets {
EthoUtils.createToolTip("#btnImportAccounts", "Import Accounts");
EthoUtils.createToolTip("#btnImportFromPrivateKey", "Import From Private Key");
}
validateNewAccountForm() {
if (EthoMainGUI.getAppState() == "account") {
if (!$("#walletPasswordFirst").val()) {
EthoMainGUI.showGeneralError("Password cannot be empty!");
return false;
}
if (!$("#walletPasswordSecond").val()) {
EthoMainGUI.showGeneralError("Password cannot be empty!");
return false;
}
if ($("#walletPasswordFirst").val() !== $("#walletPasswordSecond").val()) {
EthoMainGUI.showGeneralError("Passwords do not match!");
return false;
}
return true;
} else {
if (!$("#walletPasswordFirst").val()) {
EthoMainGUI.showGeneralError("Password cannot be empty!");
return false;
}
}
}
renderWalletsState() {
if (!$("#walletPasswordSecond").val()) {
EthoMainGUI.showGeneralError("Password cannot be empty!");
return false;
}
if ($("#walletPasswordFirst").val() !== $("#walletPasswordSecond").val()) {
EthoMainGUI.showGeneralError("Passwords do not match!");
return false;
}
return true;
} else {
return false;
}
}
renderWalletsState() {
// clear the list of addresses
EthoWallets.clearAddressList();
EthoBlockchain.getAccountsData(
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(data) {
data.addressData.forEach(element => {
EthoWallets.addAddressToList(element.address);
});
EthoBlockchain.getAccountsData(function (error) {
EthoMainGUI.showGeneralError(error);
}, function (data) {
data.addressData.forEach(element => {
EthoWallets.addAddressToList(element.address);
});
// render the wallets current state
EthoMainGUI.renderTemplate("wallets.html", data);
$(document).trigger("render_wallets");
EthoWallets.enableButtonTooltips();
// render the wallets current state
EthoMainGUI.renderTemplate("wallets.html", data);
$(document).trigger("render_wallets");
EthoWallets.enableButtonTooltips();
$("#labelSumDollars").html(vsprintf("/ %.2f $ / %.4f $ per ETHO", [data.sumBalance * EthoWallets._getPrice(), EthoWallets._getPrice()]));
}
);
$("#labelSumDollars").html(vsprintf("/ %.2f $ / %.4f $ per ETHO", [
data.sumBalance * EthoWallets._getPrice(),
EthoWallets._getPrice()
]));
});
}
}
// the event to tell us that the wallets are rendered
$(document).on("render_wallets", function() {
$('#addressTable').floatThead();
$(document).on("render_wallets", function () {
$("#addressTable").floatThead();
$("#btnNewAddress").off('click').on('click', function() {
$("#btnNewAddress").off("click").on("click", function () {
$("#dlgCreateWalletPassword").iziModal();
$("#walletPasswordFirst").val("");
$("#walletPasswordSecond").val("");
$('#dlgCreateWalletPassword').iziModal('open');
$("#dlgCreateWalletPassword").iziModal("open");
function doCreateNewWallet() {
$('#dlgCreateWalletPassword').iziModal('close');
$("#dlgCreateWalletPassword").iziModal("close");
if (EthoWallets.validateNewAccountForm()) {
EthoBlockchain.createNewAccount($("#walletPasswordFirst").val(),
function(error) {
EthoMainGUI.showGeneralError(error);
},
function(account) {
EthoWallets.addAddressToList(account);
EthoWallets.renderWalletsState();
EthoBlockchain.createNewAccount($("#walletPasswordFirst").val(), function (error) {
EthoMainGUI.showGeneralError(error);
}, function (account) {
EthoWallets.addAddressToList(account);
EthoWallets.renderWalletsState();
iziToast.success({
title: 'Created',
message: 'New wallet was successfully created',
position: 'topRight',
timeout: 5000
});
}
);
}
iziToast.success({title: "Created", message: "New wallet was successfully created", position: "topRight", timeout: 5000});
});
}
}
$("#btnCreateWalletConfirm").off('click').on('click', function() {
$("#btnCreateWalletConfirm").off("click").on("click", function () {
doCreateNewWallet();
});
$("#dlgCreateWalletPassword").off('keypress').on('keypress', function(e) {
if(e.which == 13) {
$("#dlgCreateWalletPassword").off("keypress").on("keypress", function (e) {
if (e.which == 13) {
doCreateNewWallet();
}
});
});
});
});
$(".btnShowAddressTransactions").off('click').on('click', function() {
EthoTransactions.setFilter($(this).attr('data-wallet'));
$(".btnShowAddressTransactions").off("click").on("click", function () {
EthoTransactions.setFilter($(this).attr("data-wallet"));
EthoMainGUI.changeAppState("transactions");
EthoTransactions.renderTransactions();
});
$(".btnChangWalletName").off('click').on('click', function() {
var walletAddress = $(this).attr('data-wallet');
var walletName = $(this).attr('data-name');
$(".btnChangWalletName").off("click").on("click", function () {
var walletAddress = $(this).attr("data-wallet");
var walletName = $(this).attr("data-name");
$("#dlgChangeWalletName").iziModal();
$("#inputWalletName").val(walletName);
$('#dlgChangeWalletName').iziModal('open');
$("#dlgChangeWalletName").iziModal("open");
function doChangeWalletName() {
var wallets = EthoDatatabse.getWallets();
@@ -160,103 +151,86 @@ $(document).on("render_wallets", function() {
wallets.names[walletAddress] = $("#inputWalletName").val();
EthoDatatabse.setWallets(wallets);
$('#dlgChangeWalletName').iziModal('close');
$("#dlgChangeWalletName").iziModal("close");
EthoWallets.renderWalletsState();
}
$("#btnChangeWalletNameConfirm").off('click').on('click', function() {
$("#btnChangeWalletNameConfirm").off("click").on("click", function () {
doChangeWalletName();
});
$("#dlgChangeWalletName").off('keypress').on('keypress', function(e) {
if(e.which == 13) {
$("#dlgChangeWalletName").off("keypress").on("keypress", function (e) {
if (e.which == 13) {
doChangeWalletName();
}
});
});
$("#btnRefreshAddress").off('click').on('click', function() {
});
});
$("#btnRefreshAddress").off("click").on("click", function () {
EthoWallets.renderWalletsState();
});
$("#btnExportAccounts").off('click').on('click', function() {
ipcRenderer.send('exportAccounts', {});
$("#btnExportAccounts").off("click").on("click", function () {
ipcRenderer.send("exportAccounts", {});
});
$("#btnImportAccounts").off('click').on('click', function() {
var ImportResult = ipcRenderer.sendSync('importAccounts', {});
$("#btnImportAccounts").off("click").on("click", function () {
var ImportResult = ipcRenderer.sendSync("importAccounts", {});
if (ImportResult.success) {
iziToast.success({
title: 'Imported',
message: ImportResult.text,
position: 'topRight',
timeout: 2000
});
iziToast.success({title: "Imported", message: ImportResult.text, position: "topRight", timeout: 2000});
} else if (ImportResult.success == false) {
EthoMainGUI.showGeneralError(ImportResult.text);
}
});
$("#btnImportFromPrivateKey").off('click').on('click', function() {
$("#btnImportFromPrivateKey").off("click").on("click", function () {
$("#dlgImportFromPrivateKey").iziModal();
$("#inputPrivateKey").val("");
$('#dlgImportFromPrivateKey').iziModal('open');
$("#dlgImportFromPrivateKey").iziModal("open");
function doImportFromPrivateKeys() {
var account = EthoBlockchain.importFromPrivateKey($("#inputPrivateKey").val());
$('#dlgImportFromPrivateKey').iziModal('close');
$("#dlgImportFromPrivateKey").iziModal("close");
if (account) {
ipcRenderer.sendSync('saveAccount', account[0]);
ipcRenderer.sendSync("saveAccount", account[0]);
EthoWallets.renderWalletsState();
iziToast.success({
title: 'Imported',
message: "Account was succesfully imported",
position: 'topRight',
timeout: 2000
});
iziToast.success({title: "Imported", message: "Account was succesfully imported", position: "topRight", timeout: 2000});
} else {
EthoMainGUI.showGeneralError("Error importing account from private key!");
}
}
$("#btnImportFromPrivateKeyConfirm").off('click').on('click', function() {
$("#btnImportFromPrivateKeyConfirm").off("click").on("click", function () {
doImportFromPrivateKeys();
});
$("#dlgImportFromPrivateKey").off('keypress').on('keypress', function(e) {
if(e.which == 13) {
$("#dlgImportFromPrivateKey").off("keypress").on("keypress", function (e) {
if (e.which == 13) {
doImportFromPrivateKeys();
}
});
});
});
$(".textAddress").off('click').on('click', function() {
$(".textAddress").off("click").on("click", function () {
EthoMainGUI.copyToClipboard($(this).html());
iziToast.success({
title: 'Copied',
message: 'Address was copied to clipboard',
position: 'topRight',
timeout: 2000
});
iziToast.success({title: "Copied", message: "Address was copied to clipboard", position: "topRight", timeout: 2000});
});
});
// event that tells us that geth is ready and up
$(document).on("onGethReady", function() {
$(document).on("onGethReady", function () {
EthoMainGUI.changeAppState("account");
EthoWallets.renderWalletsState();
});
$(document).on("onNewAccountTransaction", function() {
$(document).on("onNewAccountTransaction", function () {
if (EthoMainGUI.getAppState() == "account") {
EthoWallets.renderWalletsState();
EthoWallets.renderWalletsState();
}
});
EthoWallets = new Wallets();