'
- );
+ $(`#marketInfos${stats.config.coin}`)
+ .append(
+ '
' +
+ '
' +
+ '
' +
+ '
' + base + ' to ' + target + '
' +
+ '
' + price + '
' +
+ '
Source: ' + source + '
' +
+ '
' +
+ '
'
+ );
}
/**
@@ -1339,18 +1642,20 @@ function market_RenderMarketPrice(base, target, price, source, stats, marketPric
**/
// Create charts
-function market_CreateCharts(stats) {
- if (!stats || !stats.charts) return ;
+function market_CreateCharts (stats) {
+ if (!stats || !stats.charts) return;
let data = stats.charts;
let graphData = {
price: market_GetGraphData(data.price),
profit: market_GetGraphData(data.profit)
};
- for(let graphType in graphData) {
+ for (let graphType in graphData) {
if (graphData[graphType].values.length > 1) {
- let $chart = $(`#chart${stats.config.coin}_${graphType}`);
- let bgcolor = null, bordercolor = null, borderwidth = null;
+ let $chart = $(`#chart${stats.config.coin}_${graphType}`);
+ let bgcolor = null,
+ bordercolor = null,
+ borderwidth = null;
let colorelem = $chart.siblings('a.chart-style');
if (colorelem.length == 1) {
bgcolor = colorelem.css('background-color');
@@ -1377,56 +1682,79 @@ function market_CreateCharts(stats) {
animation: false,
responsive: true,
maintainAspectRatio: false,
- legend: { display: false },
- elements: { point: { radius: 0, hitRadius: 10, hoverRadius: 5 } },
+ legend: {
+ display: false
+ },
+ elements: {
+ point: {
+ radius: 0,
+ hitRadius: 10,
+ hoverRadius: 5
+ }
+ },
scales: {
xAxes: [{
display: false,
- ticks: { display: false },
- gridLines: { display: false }
+ ticks: {
+ display: false
+ },
+ gridLines: {
+ display: false
+ }
}],
yAxes: [{
display: false,
ticks: {
display: false,
beginAtZero: true,
- userCallback: function(label, index, labels) {
+ userCallback: function (label, index, labels) {
if (Math.floor(label) === label) return label;
}
},
- gridLines: { display: false }
+ gridLines: {
+ display: false
+ }
}]
},
layout: {
- padding: { top: 5, left: 10, right: 10, bottom: 10 }
+ padding: {
+ top: 5,
+ left: 10,
+ right: 10,
+ bottom: 10
+ }
},
tooltips: {
callbacks: {
- label: function(tooltipItem, data) {
+ label: function (tooltipItem, data) {
let dataType = data.datasets[tooltipItem.datasetIndex].dataType || '';
let label = tooltipItem.yLabel;
- if (dataType == 'price') label = parseFloat(tooltipItem.yLabel).toFixed(4);
- else if (dataType == 'profit') label = parseFloat(tooltipItem.yLabel).toFixed(10);
+ if (dataType == 'price') label = parseFloat(tooltipItem.yLabel)
+ .toFixed(4);
+ else if (dataType == 'profit') label = parseFloat(tooltipItem.yLabel)
+ .toFixed(10);
return ' ' + label;
}
}
}
}
});
- $chart.closest('.marketChart').show();
+ $chart.closest('.marketChart')
+ .show();
}
}
}
// Get chart data
-function market_GetGraphData(rawData) {
+function market_GetGraphData (rawData) {
let graphData = {
names: [],
values: []
};
- if(rawData) {
+ if (rawData) {
for (let i = 0, xy; xy = rawData[i]; i++) {
- graphData.names.push(new Date(xy[0]*1000).toLocaleString());
+ graphData.names.push(new Date(xy[0] * 1000)
+ .toLocaleString());
graphData.values.push(xy[1]);
}
}
@@ -1434,19 +1762,27 @@ function market_GetGraphData(rawData) {
}
+
// Calculate current estimation
-function market_CalcEstimateProfit(marketPrices){
- let rateUnit = Math.pow(1000,parseInt($('#calcHashUnit').data('mul')));
- let hashRate = parseFloat($('#calcHashRate').val()) * rateUnit;
+function market_CalcEstimateProfit (marketPrices) {
+ let rateUnit = Math.pow(1000, parseInt($('#calcHashUnit')
+ .data('mul')));
+ let hashRate = parseFloat($('#calcHashRate')
+ .val()) * rateUnit;
let coin = lastStats.config.coin
try {
- if ($(`#calcHashAmount${coin}`).length == 0) {
- let template = $(`#calcHashResultTemplate`).html()
+ if ($(`#calcHashAmount${coin}`)
+ .length == 0) {
+ let template = $(`#calcHashResultTemplate`)
+ .html()
Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:coin})
- $(`#calcHashHolder`).append(rendered)
+ let rendered = Mustache.render(template, {
+ coin: coin
+ })
+ $(`#calcHashHolder`)
+ .append(rendered)
}
- let profit = (hashRate * 86400 / lastStats.network.difficulty) * lastStats.lastblock.reward;
+ let profit = ( hashRate * 86400 / lastStats.network.adjustedDifficulty ) * ( lastStats.lastblock.reward - (lastStats.lastblock.reward * (lastStats.config.networkFee + lastStats.config.fee) / 100) )
if (profit) {
updateText(`calcHashAmount${coin}1`, getReadableCoin(lastStats, profit));
updateText(`calcHashAmount${coin}2`, market_GetCurrencyPriceText(lastStats, profit, marketPrices));
@@ -1455,123 +1791,153 @@ function market_CalcEstimateProfit(marketPrices){
updateText(`calcHashAmount${coin}1`, '');
updateText(`calcHashAmount${coin}2`, '');
}
- }
- catch (e){
+ } catch (e) {
updateText(`calcHashAmount${coin}1`, '');
updateText(`calcHashAmount${coin}2`, '');
}
- Object.keys(mergedStats).forEach(key => {
- try {
- if ($(`#calcHashAmount${key}`).length == 0) {
- let template = $(`#calcHashResultTemplate`).html()
- Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:key})
- $(`#calcHashHolder`).append(rendered)
- }
+ Object.keys(mergedStats)
+ .forEach(key => {
+ try {
+ if ($(`#calcHashAmount${key}`)
+ .length == 0) {
+ let template = $(`#calcHashResultTemplate`)
+ .html()
+ Mustache.parse(template)
+ let rendered = Mustache.render(template, {
+ coin: key
+ })
+ $(`#calcHashHolder`)
+ .append(rendered)
+ }
- let profit = (hashRate * 86400 / mergedStats[key].network.difficulty) * mergedStats[key].lastblock.reward;
- if (profit) {
- updateText(`calcHashAmount${key}1`, getReadableCoin(mergedStats[key], profit));
- updateText(`calcHashAmount${key}2`, market_GetCurrencyPriceText(mergedStats[key], profit, marketPrices));
- return;
- } else {
+ let profit = (hashRate * 86400 / mergedStats[key].network.difficulty) * (mergedStats[key].lastblock.reward - (mergedStats[key].lastblock.reward * mergedStats[key].config.networkFee / 100));
+ if (profit) {
+ updateText(`calcHashAmount${key}1`, getReadableCoin(mergedStats[key], profit));
+ updateText(`calcHashAmount${key}2`, market_GetCurrencyPriceText(mergedStats[key], profit, marketPrices));
+ return;
+ } else {
+ updateText(`calcHashAmount${key}1`, '');
+ updateText(`calcHashAmount${key}2`, '');
+ }
+ } catch (e) {
updateText(`calcHashAmount${key}1`, '');
updateText(`calcHashAmount${key}2`, '');
}
- }
- catch(e)
- {
- updateText(`calcHashAmount${key}1`, '');
- updateText(`calcHashAmount${key}2`, '');
- }
- })
+ })
}
// Get price in specified currency
-function market_GetCurrencyPriceText(stats, coinsRaw, marketPrices) {
- if (!priceCurrency || !marketPrices[stats.config.coin] || !marketPrices[stats.config.coin][priceCurrency]) return ;
+function market_GetCurrencyPriceText (stats, coinsRaw, marketPrices) {
+ if (!priceCurrency || !marketPrices[stats.config.coin] || !marketPrices[stats.config.coin][priceCurrency]) return;
let priceInCurrency = (Math.trunc(getReadableCoin(stats, coinsRaw, 2, true) * marketPrices[stats.config.coin][priceCurrency] * 100) / 100);
- return priceInCurrency + ' ' + priceCurrency;
+ return priceInCurrency + ' ' + priceCurrency;
}
-function market_InitTemplate(ranOnce, chartsInitialized, loadedData, marketPrices, intervalChartsUpdate, currencyPairs, xhrMarketGets) {
+function market_InitTemplate (ranOnce, chartsInitialized, loadedData, marketPrices, intervalChartsUpdate, currencyPairs, xhrMarketGets) {
priceSource = lastStats.config.priceSource || 'cryptonator';
priceCurrency = lastStats.config.priceCurrency || 'USD';
let coin = lastStats.config.coin
- if ($(`#blocksTabs li:contains(${coin})`).length == 0) {
+ if ($(`#blocksTabs li:contains(${coin})`)
+ .length == 0) {
chartsInitialized[coin] = false
loadedData[coin] = false
marketPrices[coin] = {}
- let template = $('#siblingTabTemplate').html();
+ let template = $('#siblingTabTemplate')
+ .html();
Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:lastStats.config.coin, symbol:`(${lastStats.config.symbol})`, active:'active'});
- $('#blocksTabs').append(rendered)
-
- let template1 = $('#siblingMarketTemplate').html()
- Mustache.parse(template1)
- let rendered1 = Mustache.render(template1, {coin:coin, active:'active'})
- $(`#tab-content`).append(rendered1)
+ let rendered = Mustache.render(template, {
+ coin: lastStats.config.coin,
+ symbol: `(${lastStats.config.symbol})`,
+ active: 'active'
+ });
+ $('#blocksTabs')
+ .append(rendered)
-
- let template2 = $('#siblingCalculatorTemplate').html()
+ let template1 = $('#siblingMarketTemplate')
+ .html()
+ Mustache.parse(template1)
+ let rendered1 = Mustache.render(template1, {
+ coin: coin,
+ active: 'active'
+ })
+ $(`#tab-content`)
+ .append(rendered1)
+
+
+ let template2 = $('#siblingCalculatorTemplate')
+ .html()
Mustache.parse(template2)
- let rendered2 = Mustache.render(template2, {coin:coin})
- $(`#calculator`).append(rendered2)
+ let rendered2 = Mustache.render(template2, {
+ coin: coin
+ })
+ $(`#calculator`)
+ .append(rendered2)
updateText(`priceChartCurrency${lastStats.config.coin}`, priceCurrency);
updateText(`profitChartProfit${lastStats.config.coin}`, priceCurrency);
if (lastStats.charts && !chartsInitialized[coin]) {
- intervalChartsUpdate[coin] = setInterval(market_CreateCharts(lastStats), 60*1000);
+ intervalChartsUpdate[coin] = setInterval(market_CreateCharts(lastStats), 60 * 1000);
market_CreateCharts(lastStats);
chartsInitialized[coin] = true;
}
}
- market_LoadMarketData(api, lastStats, loadedData, currencyPairs, xhrMarketGets, marketPrices);
+ market_LoadMarketData(api, lastStats, loadedData, currencyPairs, xhrMarketGets, marketPrices);
- Object.keys(mergedStats).forEach(key => {
- if ($(`#blocksTabs li:contains(${key})`).length === 0) {
- chartsInitialized[key] = false;
- loadedData[key] = false
- marketPrices[key] = {}
- let template1 = $('#siblingMarketTemplate').html()
- Mustache.parse(template1)
- let rendered1 = Mustache.render(template1, {coin:key})
- $('#tab-content').append(rendered1)
+ Object.keys(mergedStats)
+ .forEach(key => {
+ if ($(`#blocksTabs li:contains(${key})`)
+ .length === 0) {
+ chartsInitialized[key] = false;
+ loadedData[key] = false
+ marketPrices[key] = {}
+ let template1 = $('#siblingMarketTemplate')
+ .html()
+ Mustache.parse(template1)
+ let rendered1 = Mustache.render(template1, {
+ coin: key
+ })
+ $('#tab-content')
+ .append(rendered1)
- let template = $('#siblingTabTemplate').html();
- Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:key, symbol:`(${mergedStats[key].config.symbol})`});
- $('#blocksTabs').append(rendered)
+ let template = $('#siblingTabTemplate')
+ .html();
+ Mustache.parse(template)
+ let rendered = Mustache.render(template, {
+ coin: key,
+ symbol: `(${mergedStats[key].config.symbol})`
+ });
+ $('#blocksTabs')
+ .append(rendered)
- }
+ }
- updateText(`priceChartCurrency${mergedStats[key].config.coin}`, priceCurrency);
- updateText(`profitChartProfit${mergedStats[key].config.coin}`, priceCurrency);
+ updateText(`priceChartCurrency${mergedStats[key].config.coin}`, priceCurrency);
+ updateText(`profitChartProfit${mergedStats[key].config.coin}`, priceCurrency);
- market_LoadMarketData(mergedApis[key].api, mergedStats[key], loadedData, currencyPairs, xhrMarketGets, marketPrices);
+ market_LoadMarketData(mergedApis[key].api, mergedStats[key], loadedData, currencyPairs, xhrMarketGets, marketPrices);
- if (mergedStats[key].charts && !chartsInitialized[key]) {
- intervalChartsUpdate[key] = setInterval(market_CreateCharts(mergedStats[key]), 60*1000);
- market_CreateCharts(mergedStats[key]);
- chartsInitialized[key] = true;
- }
+ if (mergedStats[key].charts && !chartsInitialized[key]) {
+ intervalChartsUpdate[key] = setInterval(market_CreateCharts(mergedStats[key]), 60 * 1000);
+ market_CreateCharts(mergedStats[key]);
+ chartsInitialized[key] = true;
+ }
- })
+ })
market_CalcEstimateProfit(marketPrices);
-sortElementList($(`#blocksTabs`), $(`#blocksTabs>li`), mergedStats)
+ sortElementList($(`#blocksTabs`), $(`#blocksTabs>li`), mergedStats)
- if (!ranOnce)
+ if (!ranOnce)
ranOnce = RunOnce()
}
@@ -1581,295 +1947,495 @@ workerstats methods
***************************************************************
*/
-function workerstats_Setup(stats, api, addressTimeout, xhrAddressPoll, xhrGetPayments ) {
+function workerstats_Setup (stats, api, addressTimeout, xhrAddressPoll, xhrGetPayments, xhrGetBlockRewards) {
// Enable time ago on last submitted share
- $(`#yourLastShare${stats.config.coin}`).timeago();
-
- $(`#lookUp${stats.config.coin}`).click(function(){
- var address = $(`#yourStatsInput${stats.config.coin}`).val().trim();
+ $(`#yourLastShare${stats.config.coin}`)
+ .timeago();
- if (getCurrentAddress(stats.config.coin) != address) {
- docCookies.setItem(`mining_address_${stats.config.coin}`, address, Infinity);
+ $(`#lookUp${stats.config.coin}`)
+ .click(function () {
+ var address = $(`#yourStatsInput${stats.config.coin}`)
+ .val()
+ .trim();
- var urlWalletAddress = location.search.split('walletMerged=')[1] || 0;
- if (urlWalletAddress){
- window.location.href = "/#worker_stats";
- return ;
- }
- else {
+ if (getCurrentAddress(stats.config.coin) != address) {
docCookies.setItem(`mining_address_${stats.config.coin}`, address, Infinity);
- loadLiveStats(true, mergedStats);
+
+ var urlWalletAddress = location.search.split('walletMerged=')[1] || 0;
+ if (urlWalletAddress) {
+ window.location.href = "/#worker_stats";
+ return;
+ } else {
+ docCookies.setItem(`mining_address_${stats.config.coin}`, address, Infinity);
+ loadLiveStats(true, mergedStats);
+ }
}
- }
- $(`#addressError${stats.config.coin}, .yourStats${stats.config.coin}, .yourWorkers${stats.config.coin}, .userChart${stats.config.coin}`).hide();
- $(`#workersReport_rows_${stats.config.coin}`).empty();
- $(`#paymentsReport_rows_${stats.config.coin}`).empty();
+ $(`#addressError${stats.config.coin}, .yourStats${stats.config.coin}, .yourWorkers${stats.config.coin}, .userChart${stats.config.coin}`)
+ .hide();
+ $(`#workersReport_rows_${stats.config.coin}`)
+ .empty();
+ $(`#paymentsReport_rows_${stats.config.coin}`)
+ .empty();
+ $(`#recentBlock_rows_${stats.config.coin}`)
+ .empty();
- $(`#lookUp${stats.config.coin} > span:first-child`).hide();
- $(`#lookUp${stats.config.coin} > span:last-child`).show();
+ $(`#lookUp${stats.config.coin} > span:first-child`)
+ .hide();
+ $(`#lookUp${stats.config.coin} > span:last-child`)
+ .show();
- if (addressTimeout[stats.config.coin]) clearTimeout(addressTimeout[stats.config.coin]);
+ if (addressTimeout[stats.config.coin]) clearTimeout(addressTimeout[stats.config.coin]);
- if (xhrAddressPoll[stats.config.coin])
- xhrAddressPoll[stats.config.coin].abort();
+ if (xhrAddressPoll[stats.config.coin])
+ xhrAddressPoll[stats.config.coin].abort();
- $(`#lookUp${stats.config.coin} > span:last-child`).hide();
- $(`#lookUp${stats.config.coin} > span:first-child`).show();
+ $(`#lookUp${stats.config.coin} > span:last-child`)
+ .hide();
+ $(`#lookUp${stats.config.coin} > span:first-child`)
+ .show();
- if (!address){
- $(`#yourStatsInput${stats.config.coin}`).focus();
- return;
- }
+ if (!address) {
+ $(`#yourStatsInput${stats.config.coin}`)
+ .focus();
+ return;
+ }
- workerstats_FetchAddressStats(false, stats, api, xhrAddressPoll);
+ workerstats_FetchAddressStats(false, stats, api, xhrAddressPoll);
- });
+ });
var address = getCurrentAddress(stats.config.coin);
- if (address){
- $(`#yourStatsInput${stats.config.coin}`).val(address);
- $(`#lookUp${stats.config.coin}`).click();
+ if (address) {
+ $(`#yourStatsInput${stats.config.coin}`)
+ .val(address);
+ $(`#lookUp${stats.config.coin}`)
+ .click();
+ } else {
+ $(`#lookUp${stats.config.coin} > span:last-child`)
+ .hide();
+ $(`#lookUp${stats.config.coin} > span:first-child`)
+ .show();
+ $(`#addressError${stats.config.coin}, .yourStats${stats.config.coin}, .yourWorkers${stats.config.coin}, .userChart${stats.config.coin}`)
+ .hide();
}
- else {
- $(`#lookUp${stats.config.coin} > span:last-child`).hide();
- $(`#lookUp${stats.config.coin} > span:first-child`).show();
- $(`#addressError${stats.config.coin}, .yourStats${stats.config.coin}, .yourWorkers${stats.config.coin}, .userChart${stats.config.coin}`).hide();
- }
-
- $(`#yourStatsInput${stats.config.coin}`).keyup(function(e){
- if(e.keyCode === 13)
- $(`#lookUp${stats.config.coin}`).click();
- });
+
+ $(`#yourStatsInput${stats.config.coin}`)
+ .keyup(function (e) {
+ if (e.keyCode === 13)
+ $(`#lookUp${stats.config.coin}`)
+ .click();
+ });
// Handle sort on workers table
//$(`#workersReport${stats.config.coin} th.sort`).on('click', sortTable);
- $(`.workerStats th.sort`).on('click', sortTable);
+ $(`.workerStats th.sort`)
+ .on('click', sortTable);
// Load more payments button
- $(`#loadMorePayments${stats.config.coin}`).click(function(xhrGetPayments){
- if (xhrGetPayments[stats.config.coin])
- xhrGetPayments[stats.config.coin].abort();
+ $(`#loadMorePayments${stats.config.coin}`)
+ .click(function (xhrGetPayments) {
+ if (xhrGetPayments[stats.config.coin])
+ xhrGetPayments[stats.config.coin].abort();
- xhrGetPayments[stats.config.coin] = $.ajax({
- url: `${api}/get_payments`,
- data: {
- time: $(`#paymentsReport_rows_${stats.config.coin}`).children().last().data('time'),
- address: address
- },
- dataType: 'json',
- cache: 'false',
- success: function(data){
- workerstats_RenderPayments(data, stats);
- }
+ xhrGetPayments[stats.config.coin] = $.ajax({
+ url: `${api}/get_payments`,
+ data: {
+ time: $(`#paymentsReport_rows_${stats.config.coin}`)
+ .children()
+ .last()
+ .data('time'),
+ address: address
+ },
+ dataType: 'json',
+ cache: 'false',
+ success: function (data) {
+ workerstats_RenderPayments(data, stats);
+ }
+ });
+ });
+ // Load more block rewards button
+ $(`#loadMoreBlockRewards${stats.config.coin}`)
+ .click(function (xhrGetBlockRewards) {
+ if (xhrGetBlockRewards[stats.config.coin])
+ xhrGetBlockRewards[stats.config.coin].abort();
+
+ xhrGetBlockRewards[stats.config.coin] = $.ajax({
+ url: `${api}/get_blockRewards`,
+ data: {
+ height: $(`#recentBlock_rows_${stats.config.coin}`)
+ .children()
+ .last()
+ .data('height'),
+ address: address
+ },
+ dataType: 'json',
+ cache: 'false',
+ success: function (data) {
+ workerstats_RenderBlockRewards(data, stats);
+ }
+ });
});
- });
}
/**
* Miner statistics
**/
-
// Load current miner statistics
-function workerstats_FetchAddressStats(longpoll, stats, api, xhrAddressPoll){
+function workerstats_FetchAddressStats (longpoll, stats, api, xhrAddressPoll) {
let address = getCurrentAddress(stats.config.coin)
- xhrAddressPoll[stats.config.coin] = $.ajax({
- url: `${api}/stats_address`,
- data: {
- address: address,
- longpoll: longpoll
- },
- dataType: 'json',
- cache: 'false',
- success: function(data){
- if (!data.stats){
- $(`.yourStats${stats.config.coin}, .yourWorkers${stats.config.coin}, .userChart${stats.config.coin}`).hide();
- $(`#addressError${stats.config.coin}`).text(data.error).show();
- docCookies.setItem(`mining_address_${stats.config.coin}`, '', Infinity);
- loadLiveStats(true);
- return;
- }
- $(`#addressError${stats.config.coin}`).hide();
+ if (address) {
+ xhrAddressPoll[stats.config.coin] = $.ajax({
+ url: `${api}/stats_address`,
+ data: {
+ address: address,
+ longpoll: longpoll
+ },
+ dataType: 'json',
+ cache: 'false',
+ success: function (data) {
+ if (!data.stats) {
+ $(`.yourStats${stats.config.coin}, .yourWorkers${stats.config.coin}, .userChart${stats.config.coin}`)
+ .hide();
+ $(`#addressError${stats.config.coin}`)
+ .text(data.error)
+ .show();
+ docCookies.setItem(`mining_address_${stats.config.coin}`, '', Infinity);
+ loadLiveStats(true);
+ return;
+ }
+ $(`#addressError${stats.config.coin}`)
+ .hide();
- if (data.stats.lastShare) {
- $(`#yourLastShare${stats.config.coin}`).timeago('update', new Date(parseInt(data.stats.lastShare) * 1000).toISOString());
- } // AQUÍ
- else {
- updateText(`yourLastShare${stats.config.coin}`, 'Never');
- }
-
-
- updateText(`yourHashrateHolder${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate) || '0 H') + '/sec');
- if ('hashrate_1h' in data.stats) {
- $(`#minerAvgHR${stats.config.coin}`).show();
- updateText(`yourHR1h${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate_1h) || '0 H') + '/s');
- updateText(`yourHR6h${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate_6h) || '0 H') + '/s');
- updateText(`yourHR24h${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate_24h) || '0 H') + '/s');
- } else {
- $(`#minerAvgHR${stats.config.coin}`).hide();
- }
-
- let totalCoins = data.stats.paid;
- let last24hCoins = 0;
- let last7dCoins = 0;
-
- for (let i = 0; i < data.payments.length; i += 2) {
- let payment = workerstats_ParsePayment(data.payments[i + 1], data.payments[i]);
- let paymentDate = new Date(parseInt(payment.time) * 1000);
- let daysDiff = moment().diff(moment(paymentDate), 'days');
-
- if (daysDiff < 1) {
- last24hCoins = last24hCoins + parseInt(payment.amount);
+ if (data.stats.lastShare) {
+ $(`#yourLastShare${stats.config.coin}`)
+ .timeago('update', new Date(parseInt(data.stats.lastShare) * 1000)
+ .toISOString());
+ } // AQUÃ
+ else {
+ updateText(`yourLastShare${stats.config.coin}`, 'Never');
}
- if (daysDiff < 7) {
- last7dCoins = last7dCoins + parseInt(payment.amount);
+
+ updateText(`yourHashrateHolder${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate) || '0 H') + '/sec');
+ if ('hashrate_1h' in data.stats) {
+ $(`#minerAvgHR${stats.config.coin}`)
+ .show();
+ updateText(`yourHR1h${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate_1h) || '0 H') + '/s');
+ updateText(`yourHR6h${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate_6h) || '0 H') + '/s');
+ updateText(`yourHR24h${stats.config.coin}`, (getReadableHashRateString(data.stats.hashrate_24h) || '0 H') + '/s');
+ } else {
+ $(`#minerAvgHR${stats.config.coin}`)
+ .hide();
}
- }
-
- // $.getJSON(`https://api.coingecko.com/api/v3/coins/${stats.config.coin.toLowerCase()}?sparkline=true`, function() {})
- // .done(data => {
- // let paidTotalUSD = getReadableCoin(stats, totalCoins, 2, true) * data.market_data.current_price.usd;
- // let paid24hUSD = getReadableCoin(stats, last24hCoins, 2, true) * data.market_data.current_price.usd;
- // let paid7dUSD = getReadableCoin(stats, last7dCoins, 2, true) * data.market_data.current_price.usd;
-
- // updateText(`yourPaid${stats.config.coin}`, `${getReadableCoin(stats, totalCoins)} - $${paidTotalUSD.toFixed(2)}`);
- // updateText(`paid24h${stats.config.coin}`, `${getReadableCoin(stats, last24hCoins)} - $${paid24hUSD.toFixed(2)}`);
- // updateText(`paid7d${stats.config.coin}`, `${getReadableCoin(stats, last7dCoins)} - $${paid7dUSD.toFixed(2)}`);
- // })
- // .fail(() => {
- updateText(`yourPaid${stats.config.coin}`, getReadableCoin(stats, totalCoins));
- updateText(`paid24h${stats.config.coin}`, getReadableCoin(stats, last24hCoins));
- updateText(`paid7d${stats.config.coin}`, getReadableCoin(stats, last7dCoins));
- // })
+ updateText(`yourPaid${stats.config.coin}`, getReadableCoin(stats, data.stats.paid));
+ updateText(`paid24h${stats.config.coin}`, getReadableCoin(stats, data.stats.paid24h));
+ updateText(`paid7d${stats.config.coin}`, getReadableCoin(stats, data.stats.paid7d));
- updateText(`yourHashes${stats.config.coin}`, (data.stats.hashes || 0).toString());
- //updateText(`yourPaid${stats.config.coin}`, getReadableCoin(stats, data.stats.paid));
- updateText(`yourPendingBalance${stats.config.coin}`, getReadableCoin(stats, data.stats.balance));
+ updateText(`yourHashes${stats.config.coin}`, (data.stats.hashes || 0)
+ .toString());
+ updateText(`yourPendingBalance${stats.config.coin}`, getReadableCoin(stats, data.stats.balance));
- let userRoundHashes = parseInt(data.stats.roundHashes || 0);
- let poolRoundHashes = parseInt(stats.pool.roundHashes || 0);
- let userRoundScore = parseFloat(data.stats.roundScore || 0);
- let poolRoundScore = parseFloat(stats.pool.roundScore || 0);
- let lastReward = parseFloat(stats.lastblock.reward || 0);
-
-
- let poolFee = stats.config.fee;
- if (Object.keys((stats.config.donation)).length) {
- let totalDonation = 0;
- let ldon = stats.config.donation;
- for(let i in ldon) {
- totalDonation += ldon[i];
+ let allWorkers = 0, onlineWorkers = 0, offlineWorkers = 0
+ if(data && data.workers) {
+ for (var worker = 0; worker < data.workers.length; worker++) {
+ if (Date.now() / 1000 - parseInt(data.workers[worker].lastShare) > 2 * 86400)
+ continue
+ allWorkers++
+ if(data.workers[worker].hashrate === 0) {
+ offlineWorkers++
+ }
+ else {
+ onlineWorkers++
+ }
+ }
}
- poolFee += totalDonation;
- }
- let transferFee = stats.config.transferFee;
- let share_pct = userRoundHashes * 100 / poolRoundHashes;
- let score_pct = userRoundScore * 100 / poolRoundScore;
- updateText(`yourRoundShareProportion${stats.config.coin}`, isNaN(share_pct) ? 0.0 : Math.round(share_pct * 1000) / 1000);
- updateText(`yourRoundScoreProportion${stats.config.coin}`, isNaN(score_pct) ? 0.0 : Math.round(score_pct * 1000) / 1000);
- if (!lastStats.config.slushMiningEnabled) {
- $(`#slush_round_info${stats.config.coin}`).hide();
- }
+ updateText(`allWorkers_${stats.config.coin}`, allWorkers)
+ updateText(`onlineWorkers_${stats.config.coin}`, onlineWorkers)
+ updateText(`offlineWorkers_${stats.config.coin}`, offlineWorkers)
- let payoutEstimatePct = parseFloat(userRoundHashes * 100 / poolRoundHashes)
- let payoutEstimate = Math.round(lastReward * (payoutEstimatePct / 100));
+ let userRoundHashes = parseFloat(data.stats.roundHashes || 0);
+ let poolRoundHashes = parseFloat(stats.pool.roundHashes || 0);
+ let userRoundScore = parseFloat(data.stats.roundScore || 0);
+ let poolRoundScore = parseFloat(stats.pool.roundScore || 0);
+ let lastReward = stats.lastblock.reward - (stats.lastblock.reward * (stats.config.networkFee ? stats.config.networkFee / 100 : 0));
+
+ let poolFee = stats.config.fee;
+ if (Object.keys((stats.config.donation))
+ .length) {
+ let totalDonation = 0;
+ let ldon = stats.config.donation;
+ for (let i in ldon) {
+ totalDonation += ldon[i];
+ }
+ poolFee += totalDonation;
+ }
+ let transferFee = stats.config.transferFee;
+
+ let share_pct = userRoundHashes * 100 / poolRoundHashes;
+ let score_pct = userRoundScore * 100 / poolRoundScore;
+ updateText(`yourRoundShareProportion${stats.config.coin}`, isNaN(share_pct) ? 0.0 : Math.round(share_pct * 1000) / 1000);
+ updateText(`yourRoundScoreProportion${stats.config.coin}`, isNaN(score_pct) ? 0.0 : Math.round(score_pct * 1000) / 1000);
+ if (!lastStats.config.slushMiningEnabled) {
+ $(`#slush_round_info${stats.config.coin}`)
+ .hide();
+ }
+
+ let payoutEstimatePct = parseFloat(userRoundHashes * 100 / poolRoundHashes)
+ let payoutEstimate = Math.round(lastReward * (payoutEstimatePct / 100));
if (transferFee) payoutEstimate = payoutEstimate - transferFee;
- if (payoutEstimate < 0)
- payoutEstimate = 0;
- updateText(`yourPayoutEstimate${stats.config.coin}`, getReadableCoin(stats, payoutEstimate));
+ if (payoutEstimate < 0)
+ payoutEstimate = 0;
+ updateText(`yourPayoutEstimate${stats.config.coin}`, getReadableCoin(stats, payoutEstimate));
- workerstats_RenderPayments(data.payments, stats);
+ workerstats_RenderPayments(data.payments, stats);
+ if (data.block_rewards)
+ workerstats_RenderBlockRewards(data.block_rewards, stats)
- if (data.workers && data.workers.length > 0) {
- workerstats_RenderWorkers(data.workers, stats);
- $(`.yourWorkers${stats.config.coin}`).show();
+ if (data.workers && data.workers.length > 0) {
+ workerstats_RenderWorkers(data.workers, stats);
+ $(`.yourWorkers${stats.config.coin}`)
+ .show();
+ }
+
+ $(`.yourStats${stats.config.coin}`)
+ .show();
+ workerstats_CreateCharts(data, stats);
+
+ },
+ error: function (e) {
+ if (e.statusText === 'abort') return;
+ $(`#addressError${stats.config.coin}`)
+ .text('Connection error')
+ .show();
+
+ if (addressTimeout[stats.config.coin])
+ clearTimeout(addressTimeout[stats.config.coin]);
+
+ addressTimeout[stats.config.coin] = setTimeout(function () {
+ workerstats_FetchAddressStats(false, stats, mergedApis[stats.config.coin].api);
+ }, 2000);
}
-
- $(`.yourStats${stats.config.coin}`).show();
- workerstats_CreateCharts(data, stats);
-
- },
- error: function(e){
- if (e.statusText === 'abort') return;
- $(`#addressError${stats.config.coin}`).text('Connection error').show();
-
- if (addressTimeout[stats.config.coin])
- clearTimeout(addressTimeout[stats.config.coin]);
-
- addressTimeout[stats.config.coin] = setTimeout(function(){
- workerstats_FetchAddressStats(false, stats, mergedApis[stats.config.coin].api);
- }, 2000);
- }
- });
+ });
+ }
}
/**
* Charts
**/
+ let workerstats_graphSettings = {
+ type: 'line',
+ width: '100%',
+ height: '140',
+ lineColor: '#03a9f4',
+ fillColor: 'rgba(3, 169, 244, .4)',
+ spotColor: null,
+ minSpotColor: null,
+ maxSpotColor: null,
+ highlightLineColor: '#236d26',
+ spotRadius: 3,
+ chartRangeMin: 0,
+ drawNormalOnTop: false,
+ tooltipFormat: '
{{y}} – {{offset:names}}
',
+ tooltipFormatter: (sp, options, fields) => {
+ let format = $.spformat(options.mergedOptions.tooltipFormat)
+ if (options.get('tooltipValueLookups').type == 'hashrate')
+ fields.y = getReadableHashRateString(fields.y)
+ return format.render(fields, options.get('tooltipValueLookups'), options)
+ }
+};
+
// Create charts
-function workerstats_CreateCharts(data, stats) {
+function workerstats_CreateCharts (data, stats) {
if (data.hasOwnProperty("charts")) {
var graphData = {
- hashrate: workerstats_GetGraphData(stats, data.charts.hashrate),
- payments: workerstats_GetGraphData(stats, data.charts.payments, true)
- };
-
- for(var graphType in graphData) {
- if(graphData[graphType].values.length > 1) {
- var settings = jQuery.extend({}, graphSettings);
- settings.tooltipValueLookups = {names: graphData[graphType].names};
- var $chart = $(`[data-chart=user_${graphType}_${stats.config.coin}]`).show().find('.chart');
- $chart.sparkline(graphData[graphType].values, settings);
+ hashrate: {
+ data: [workerstats_GetGraphData(stats, data.charts.hashrate), workerstats_GetGraphData(stats, data.charts.hashrateSolo)],
+ options: {
+ lineColor: 'orange'
+ }
}
}
+
+ for (var graphType in graphData) {
+ if (graphData[graphType].data[0].values.length > 1) {
+ var settings = jQuery.extend({}, workerstats_graphSettings);
+ settings.tooltipValueLookups = {
+ names: graphData[graphType].data[0].names,
+ type: graphType
+ };
+ var $chart = $(`[data-chart=user_${graphType}_${stats.config.coin}]`)
+ .show()
+ .find('.chart');
+ $chart.sparkline(graphData[graphType].data[0].values, settings);
+ if (graphData[graphType].data[1]) {
+ settings.composite = true
+ settings.lineColor = graphData[graphType].options.lineColor
+ $chart.sparkline(graphData[graphType].data[1].values, settings);
+ }
+ }
+ }
+ workerstats_createMinerCharts(data, stats)
}
}
-// Get chart data
-function workerstats_GetGraphData(stats, rawData, fixValueToCoins) {
+function workerstats_GetEarningsData(rawData) {
var graphData = {
names: [],
values: []
};
-
- if(rawData) {
- for (var i = 0, xy; xy = rawData[i]; i++) {
- graphData.names.push(new Date(xy[0]*1000).toLocaleString());
- graphData.values.push(fixValueToCoins ? getReadableCoin(stats, xy[1], null, true) : xy[1]);
+ if (rawData) {
+ for (var i = 0; i < rawData.length - 1; i+=2) {
+ graphData.names.push(new Date(rawData[i+1] * 1000).toDateString());
+ graphData.values.push(rawData[i]);
}
}
+ return graphData
+}
+let charts = {}
+
+function workerstats_createMinerCharts(data, stats) {
+ let graphData = {
+ payments: workerstats_GetEarningsData(data.stats.earnings)
+ };
+ for (var graphType in graphData) {
+ if (charts[graphType]) {
+ charts[graphType].destroy();
+ }
+ if (graphData[graphType].values) {
+ let $chart = $(`[data-chart=user_${graphType}_${stats.config.coin}]`);
+ let bgcolor = null, bordercolor = null, borderwidth = null;
+ let colorelem = $chart.siblings('a.chart-style');
+ if (colorelem.length == 1) {
+ bgcolor = colorelem.css('background-color');
+ bordercolor = colorelem.css('border-left-color');
+ borderwidth = parseFloat(colorelem.css('width'));
+ }
+ if (bgcolor === null) bgcolor = 'rgba(3, 169, 244, .4)';
+ if (bordercolor === null) bordercolor = '#03a9f4';
+ if (borderwidth === null || isNaN(borderwidth)) borderwidth = 1;
+ charts[graphType] = new Chart(document.getElementById(`chart_${graphType}_${stats.config.coin}`), {
+ type: 'bar',
+ data: {
+ labels: graphData[graphType].names,
+ datasets: [{
+ data: graphData[graphType].values,
+ dataType: graphType,
+ fill: true,
+ backgroundColor: bgcolor,
+ borderColor: bordercolor,
+ borderWidth: borderwidth
+ }]
+ },
+ options: {
+ animation: false,
+ title: {
+ display: true,
+ text: 'Miner Payments'
+ },
+ responsive: true,
+ maintainAspectRatio: false,
+ legend: {display: false},
+ elements: {point: {radius: 0, hitRadius: 10, hoverRadius: 5}},
+ scales: {
+ xAxes: [{
+ "fontSize": 12,
+ "fontFamily": "Source Sans Pro",
+ display: false,
+ ticks: {display: false},
+ gridLines: {display: false}
+ }],
+ yAxes: [{
+ display: true,
+ ticks: {
+ "fontSize": 12,
+ "fontFamily": "Source Sans Pro",
+ display: true,
+ beginAtZero: true,
+ callback: (graphType == 'payments' ? function (label, index, labels) {
+ return getReadableCoin(stats, label);
+ } : function (label, index, labels) {
+ return label;
+ })
+ },
+ gridLines: {display: false}
+ }]
+ },
+ layout: {
+ padding: {top: 15, left: 0, right: 15, bottom: 15}
+ },
+ tooltips: {
+ callbacks: {
+ label: function (tooltipItem, data) {
+ return ` ${getReadableCoin(stats, tooltipItem.yLabel)}`
+ }
+ }
+ }
+ }
+ });
+ $chart.closest(`.userPaymentChart${stats.config.coin}`).show();
+ }
+ }
+}
+
+function workerstats_GetGraphData (stats, rawData, fixValueToCoins, collate) {
+ var graphData = {
+ names: [],
+ values: []
+ };
+ collate = collate ? collate : false
+ if (rawData) {
+ let currentDate = null
+ let accumulator = -1
+ for (var i = 0, xy; xy = rawData[i]; i++) {
+ if (collate) {
+ if (currentDate === new Date(xy[0] * 1000).setHours(0, 0, 0, 0)) {
+ graphData.values[accumulator] += parseFloat(xy[1])
+ } else {
+ accumulator++
+ currentDate = new Date(xy[0] * 1000).setHours(0, 0, 0, 0)
+ graphData.names.push(new Date(currentDate).toDateString());
+ graphData.values[accumulator] = parseFloat(xy[1]);
+ }
+ }
+ else {
+ graphData.names.push(new Date(xy[0] * 1000).toLocaleString());
+ graphData.values.push(fixValueToCoins ? getReadableCoin(stats, xy[1], null, true) : xy[1]);
+ }
+ }
+ }
return graphData;
}
+
/**
* Workers report
**/
// Get worker row id
-function workerstats_GetWorkerRowId(workerName){
+function workerstats_GetWorkerRowId (workerName) {
var id = btoa(workerName);
id = id.replace(/=/, '');
return id;
}
// Get worker row element
-function workerstats_GetWorkerRowElement(worker, jsonString, stats){
+function workerstats_GetWorkerRowElement (worker, jsonString, stats) {
var row = document.createElement('tr');
row.setAttribute('data-json', jsonString);
row.setAttribute('data-name', worker.name);
@@ -1881,64 +2447,68 @@ function workerstats_GetWorkerRowElement(worker, jsonString, stats){
}
// Get worker cells
-function workerstats_GetWorkerCells(worker){
+function workerstats_GetWorkerCells (worker) {
let hashrate = worker.hashrate ? worker.hashrate : 0;
- let hashrate1h = worker.hashrate_1h || 0;
- let hashrate6h = worker.hashrate_6h || 0;
- let hashrate24h = worker.hashrate_24h || 0;
+ let hashrate1h = worker.hashrate_1h || 0;
+ let hashrate6h = worker.hashrate_6h || 0;
+ let hashrate24h = worker.hashrate_24h || 0;
let lastShare = worker.lastShare ? worker.lastShare : 0;
- let hashes = (worker.hashes || 0).toString();
+ let hashes = (worker.hashes || 0)
+ .toString();
let status = (hashrate <= 0) ? 'error' : 'ok';
- return '
| ' +
- '
' + (worker.name != 'undefined' ? worker.name : 'Undefined') + ' | ' +
- '
' + getReadableHashRateString(hashrate) + '/s | ' +
- '
' + getReadableHashRateString(hashrate1h) + '/s | ' +
- '
' + getReadableHashRateString(hashrate6h) + '/s | ' +
- '
' + getReadableHashRateString(hashrate24h) + '/s | ' +
- '
' + (lastShare ? $.timeago(new Date(parseInt(lastShare) * 1000).toISOString()) : 'Never') + ' | ' +
- '
' + hashes + ' | ';
+ return '
| ' +
+ '
' + (worker.name != 'undefined' ? worker.name : 'Undefined') + ' | ' +
+ '
' + getReadableHashRateString(hashrate) + '/s | ' +
+ '
' + getReadableHashRateString(hashrate1h) + '/s | ' +
+ '
' + getReadableHashRateString(hashrate6h) + '/s | ' +
+ '
' + getReadableHashRateString(hashrate24h) + '/s | ' +
+ '
' + (lastShare ? $.timeago(new Date(parseInt(lastShare) * 1000)
+ .toISOString()) : 'Never') + ' | ' +
+ '
' + hashes + ' | ';
}
// Sort workers
-function workerstats_SortWorkers(a, b){
+function workerstats_SortWorkers (a, b) {
var aName = a.name.toLowerCase();
var bName = b.name.toLowerCase();
return ((aName < bName) ? -1 : ((aName > bName) ? 1 : 0));
}
// Render workers list
-function workerstats_RenderWorkers(workersData, stats){
+function workerstats_RenderWorkers (workersData, stats) {
workersData = workersData.sort(workerstats_SortWorkers);
var $workersRows = $(`#workersReport_rows_${stats.config.coin}`);
- for (var i = 0; i < workersData.length; i++){
+ for (var i = 0; i < workersData.length; i++) {
var existingRow = document.getElementById(`workerRow${stats.config.coin}_${workerstats_GetWorkerRowId(workersData[i].name)}`);
- if (!existingRow){
+ if (!existingRow) {
$workersRows.empty();
break;
}
}
- let have_avg_hr = false;
+ let have_avg_hr = false;
- for (var i = 0; i < workersData.length; i++){
+ for (var i = 0; i < workersData.length; i++) {
var worker = workersData[i];
- if (Date.now()/1000 - parseInt(worker.lastShare) > 2 * 86400) continue;
+ if (Date.now() / 1000 - parseInt(worker.lastShare) > 2 * 86400) continue;
if (!have_avg_hr && 'hashrate_1h' in worker) have_avg_hr = true;
var workerJson = JSON.stringify(worker);
var existingRow = document.getElementById(`workerRow${stats.config.coin}_${workerstats_GetWorkerRowId(worker.name)}`);
- if (existingRow && existingRow.getAttribute('data-json') !== workerJson){
- $(existingRow).replaceWith(workerstats_GetWorkerRowElement(worker, workerJson, stats));
- }
- else if (!existingRow){
+ if (existingRow && existingRow.getAttribute('data-json') !== workerJson) {
+ $(existingRow)
+ .replaceWith(workerstats_GetWorkerRowElement(worker, workerJson, stats));
+ } else if (!existingRow) {
var workerElement = workerstats_GetWorkerRowElement(worker, workerJson, stats);
$workersRows.append(workerElement);
}
}
- if (!have_avg_hr) $(`#workersReport${stats.config.coin} .avghr`).hide();
- else $(`#workersReport${stats.config.coin} .avghr`).show();
+ if (!have_avg_hr) $(`#workersReport${stats.config.coin} .avghr`)
+ .hide();
+ else $(`#workersReport${stats.config.coin} .avghr`)
+ .show();
}
/**
@@ -1946,7 +2516,7 @@ function workerstats_RenderWorkers(workersData, stats){
**/
// Parse payment data
-function workerstats_ParsePayment(time, serializedPayment){
+function workerstats_ParsePayment (time, serializedPayment) {
var parts = serializedPayment.split(':');
return {
time: parseInt(time),
@@ -1958,8 +2528,25 @@ function workerstats_ParsePayment(time, serializedPayment){
};
}
+// Parse block_reward data
+function workerstats_ParseBlockReward (height, serializedPayment) {
+ var parts = serializedPayment.split(':');
+ return {
+ height: height,
+ rewardType: parts[0],
+ hash: parts[1],
+ time: parseInt(parts[2]),
+ difficulty: parts[3],
+ shares: parts[4],
+ blockReward: parts[5],
+ reward: parts[6],
+ percent: parts[7],
+ finderFee: parts[8]
+ };
+}
+
// Get payment row element
-function workerstats_GetPaymentRowElement(payment, jsonString, stats){
+function workerstats_GetPaymentRowElement (payment, jsonString, stats) {
var row = document.createElement('tr');
row.setAttribute('data-json', jsonString);
row.setAttribute('data-time', payment.time);
@@ -1970,16 +2557,41 @@ function workerstats_GetPaymentRowElement(payment, jsonString, stats){
return row;
}
+// Get blockreward row element
+function workerstats_GetBlockRewardRowElement (block_reward, jsonString, stats) {
+ var row = document.createElement('tr');
+ row.setAttribute('data-json', jsonString);
+ row.setAttribute('data-height', block_reward.height);
+ row.setAttribute('id', 'blockRewardRow' + stats.config.coin + block_reward.time);
+ row.innerHTML = workerstats_GetBlockRewardCells(block_reward, stats);
+ return row;
+}
+
// Get payment cells
-function workerstats_GetPaymentCells(payment, stats){
- return '
' + formatDate(payment.time) + ' | ' +
- '
' + formatPaymentLink(payment.hash, stats) + ' | ' +
- '
' + getReadableCoin(stats, payment.amount) + ' | ' +
- '
' + payment.mixin + ' | ';
+function workerstats_GetPaymentCells (payment, stats) {
+ return `
${formatDate(payment.time)} | ` +
+ `
${formatPaymentLink(payment.hash, stats)} | ` +
+ `
${getReadableCoin(stats, payment.amount)} | ` +
+ `
${getReadableCoin(stats, payment.fee)} | ` +
+ `
${payment.mixin} | `;
+}
+
+// Get block_reward cells
+function workerstats_GetBlockRewardCells (block_reward, stats) {
+ function formatBlockRewardLink (block_reward, stats) {
+ return '
' + block_reward.height + '';
+ }
+ return `
${formatBlockRewardLink(block_reward, stats)} | ` +
+ `
${formatDate(block_reward.time)} | ` +
+ `
${block_reward.difficulty} | ` +
+ `
${formatLuck(block_reward.difficulty, block_reward.shares, false)} | ` +
+ `
${getReadableCoin(stats, block_reward.blockReward)} | ` +
+ `
${getReadableCoin(stats, block_reward.reward)} ( = ${(block_reward.percent * 100).toFixed(2)}% after pool fees) | ` +
+ `
${block_reward.rewardType} | `;
}
// Get summary row element
-function workerstats_GetSummaryRowElement(summary, jsonString, stats){
+function workerstats_GetSummaryRowElement (summary, jsonString, stats) {
var row = document.createElement('tr');
row.setAttribute('data-json', jsonString);
row.setAttribute('data-date', summary.date);
@@ -1992,42 +2604,55 @@ function workerstats_GetSummaryRowElement(summary, jsonString, stats){
}
// Get summary cells
-function workerstats_GetSummaryCells(summary, stats){
+function workerstats_GetSummaryCells (summary, stats) {
var text = getTranslation('paymentSummaryMulti') ? getTranslation('paymentSummaryMulti') : 'On %DATE% you have received %AMOUNT% in %COUNT% payments';
if (summary.count <= 1) text = getTranslation('paymentSummarySingle') ? getTranslation('paymentSummarySingle') : 'On %DATE% you have received %AMOUNT%';
text = text.replace(/%DATE%/g, summary.date);
text = text.replace(/%COUNT%/g, summary.count);
text = text.replace(/%AMOUNT%/g, getReadableCoin(stats, summary.amount));
- return '
' + text + ' | ';
+ return '
' + text + ' | ';
}
// Render payments
-function workerstats_RenderPayments(paymentsResults, stats){
+function workerstats_RenderPayments (paymentsResults, stats) {
var $paymentsRows = $(`#paymentsReport_rows_${stats.config.coin}`);
var lastPaymentDate = null;
- var summaryData = { date: null, time: null, count: 0, amount: 0 };
- for (var i = 0; i < paymentsResults.length; i += 2){
+ var summaryData = {
+ date: null,
+ time: null,
+ count: 0,
+ amount: 0
+ };
+ for (var i = 0; i < paymentsResults.length; i += 2) {
var payment = workerstats_ParsePayment(paymentsResults[i + 1], paymentsResults[i]);
var paymentJson = JSON.stringify(payment);
var paymentElement = workerstats_GetPaymentRowElement(payment, paymentJson, stats);
- var paymentDate = new Date(parseInt(payment.time) * 1000).toLocaleDateString();
+ var paymentDate = new Date(parseInt(payment.time) * 1000)
+ .toLocaleDateString();
if (!lastPaymentDate || lastPaymentDate && paymentDate != lastPaymentDate) {
- summaryData = { date: paymentDate, time: payment.time, count: 0, amount: 0 };
+ summaryData = {
+ date: paymentDate,
+ time: payment.time,
+ count: 0,
+ amount: 0
+ };
}
var existingRow = document.getElementById(`paymentRow${stats.config.coin}${payment.time}`);
- if (existingRow && existingRow.getAttribute('data-json') !== paymentJson){
- $(existingRow).replaceWith(workerstats_GetPaymentRowElement(payment, paymentJson, stats));
- }
- else if (!existingRow){
+ if (existingRow && existingRow.getAttribute('data-json') !== paymentJson) {
+ $(existingRow)
+ .replaceWith(workerstats_GetPaymentRowElement(payment, paymentJson, stats));
+ } else if (!existingRow) {
var inserted = false;
- var rows = $paymentsRows.children().get();
+ var rows = $paymentsRows.children()
+ .get();
for (var f = 0; f < rows.length; f++) {
var pTime = parseInt(rows[f].getAttribute('data-time'));
- if (pTime && pTime < payment.time){
+ if (pTime && pTime < payment.time) {
inserted = true;
- $(rows[f]).before(paymentElement);
+ $(rows[f])
+ .before(paymentElement);
break;
}
}
@@ -2036,24 +2661,26 @@ function workerstats_RenderPayments(paymentsResults, stats){
}
}
- summaryData.count ++;
- summaryData.amount += parseInt(payment.amount);
+ summaryData.count++;
+ summaryData.amount += parseFloat(payment.amount) + parseFloat(payment.fee);
var summaryJson = JSON.stringify(summaryData);
var summaryElement = workerstats_GetSummaryRowElement(summaryData, summaryJson, stats);
var existingSummary = document.getElementById(`summaryRow${stats.config.coin}${summaryData.date}`);
- if (existingSummary && existingSummary.getAttribute('data-json') !== summaryJson){
- $(existingSummary).replaceWith(summaryElement);
- }
- else if (!existingSummary){
+ if (existingSummary && existingSummary.getAttribute('data-json') !== summaryJson) {
+ $(existingSummary)
+ .replaceWith(summaryElement);
+ } else if (!existingSummary) {
var inserted = false;
- var rows = $paymentsRows.children().get();
+ var rows = $paymentsRows.children()
+ .get();
for (var f = 0; f < rows.length; f++) {
var pTime = parseInt(rows[f].getAttribute('data-time'));
- if (pTime && pTime === summaryData.time){
+ if (pTime && pTime === summaryData.time) {
inserted = true;
- $(rows[f]).before(summaryElement);
+ $(rows[f])
+ .before(summaryElement);
break;
}
}
@@ -2065,41 +2692,98 @@ function workerstats_RenderPayments(paymentsResults, stats){
}
}
-function workerstats_InitTemplate(ranOnce, addressTimeout, xhrAddressPoll, xhrGetPayments ) {
- let coin = lastStats.config.coin
- if ($(`#blocksTabs li:contains(${coin})`).length === 0) {
- let template = $('#siblingTabTemplate').html();
- Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:lastStats.config.coin, symbol:`(${lastStats.config.symbol})`, active: 'active'});
- $('#blocksTabs').append(rendered)
+// Render block_rewards
- template = $('#siblingTemplate').html()
- Mustache.parse(template)
- rendered = Mustache.render(template, {coin:coin, active: 'active'})
- $('#tab-content').append(rendered)
- workerstats_Setup(lastStats, api, addressTimeout, xhrAddressPoll, xhrGetPayments)
+function workerstats_RenderBlockRewards(blockRewardsResults, stats) {
+ var $blockRewardsRows = $(`#recentBlock_rows_${stats.config.coin}`);
+ for (var i = 0; i < blockRewardsResults.length; i += 2) {
+ var block_reward = workerstats_ParseBlockReward(blockRewardsResults[i + 1], blockRewardsResults[i]);
+ var block_rewardJson = JSON.stringify(block_reward);
+ var paymentElement = workerstats_GetBlockRewardRowElement(block_reward, block_rewardJson, stats);
+
+
+ var existingRow = document.getElementById(`blockRewardRow${stats.config.coin}${block_reward.time}`);
+ if (existingRow && existingRow.getAttribute('data-json') !== block_rewardJson) {
+ $(existingRow)
+ .replaceWith(workerstats_GetBlockRewardRowElement(block_reward, block_rewardJson, stats));
+ } else if (!existingRow) {
+ var inserted = false;
+ var rows = $blockRewardsRows.children()
+ .get();
+ for (var f = 0; f < rows.length; f++) {
+ var pTime = parseInt(rows[f].getAttribute('data-time'));
+ if (pTime && pTime < block_reward.time) {
+ inserted = true;
+ $(rows[f])
+ .before(paymentElement);
+ break;
+ }
+ }
+ if (!inserted) {
+ $blockRewardsRows.append(paymentElement);
+ }
+ }
+ }
+}
+
+function workerstats_InitTemplate (ranOnce, addressTimeout, xhrAddressPoll, xhrGetPayments, xhrGetBlockRewards) {
+ let coin = lastStats.config.coin
+ if ($(`#blocksTabs li:contains(${coin})`)
+ .length === 0) {
+ let template = $('#siblingTabTemplate')
+ .html();
+ Mustache.parse(template)
+ let rendered = Mustache.render(template, {
+ coin: lastStats.config.coin,
+ symbol: `(${lastStats.config.symbol})`,
+ active: 'active'
+ });
+ $('#blocksTabs')
+ .append(rendered)
+
+ template = $('#siblingTemplate')
+ .html()
+ Mustache.parse(template)
+ rendered = Mustache.render(template, {
+ coin: coin,
+ active: 'active'
+ })
+ $('#tab-content')
+ .append(rendered)
+ workerstats_Setup(lastStats, api, addressTimeout, xhrAddressPoll, xhrGetPayments, xhrGetBlockRewards)
}
- Object.keys(mergedStats).forEach(key => {
- if ($(`#blocksTabs li:contains(${key})`).length === 0) {
- coin = key
- let template = $('#siblingTabTemplate').html();
- Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:mergedStats[key].config.coin, symbol:`(${mergedStats[key].config.symbol})`});
- $('#blocksTabs').append(rendered)
+ Object.keys(mergedStats)
+ .forEach(key => {
+ if ($(`#blocksTabs li:contains(${key})`)
+ .length === 0) {
+ coin = key
+ let template = $('#siblingTabTemplate')
+ .html();
+ Mustache.parse(template)
+ let rendered = Mustache.render(template, {
+ coin: mergedStats[key].config.coin,
+ symbol: `(${mergedStats[key].config.symbol})`
+ });
+ $('#blocksTabs')
+ .append(rendered)
- template = $('#siblingTemplate').html()
- Mustache.parse(template)
- rendered = Mustache.render(template, {coin:coin})
- $('#tab-content').append(rendered)
- workerstats_Setup(mergedStats[key], mergedApis[key].api, addressTimeout, xhrAddressPoll, xhrGetPayments)
- }
- })
+ template = $('#siblingTemplate')
+ .html()
+ Mustache.parse(template)
+ rendered = Mustache.render(template, {
+ coin: coin
+ })
+ $('#tab-content')
+ .append(rendered)
+ workerstats_Setup(mergedStats[key], mergedApis[key].api, addressTimeout, xhrAddressPoll, xhrGetPayments, xhrGetBlockRewards)
+ }
+ })
sortElementList($(`#blocksTabs`), $(`#blocksTabs>li`), mergedStats)
- if (!ranOnce)
- ranOnce = RunOnce()
+ if (!ranOnce)
+ ranOnce = RunOnce()
}
@@ -2122,88 +2806,146 @@ let home_GraphSettings = {
spotRadius: 3,
chartRangeMin: 0,
drawNormalOnTop: false,
- tooltipFormat: '
{{y}} – {{offset:names}}'
+ tooltipFormat: '
{{y}} – {{offset:names}}
',
+ tooltipFormatter: (sp, options, fields) => {
+ let format = $.spformat(options.mergedOptions.tooltipFormat)
+ if (options.get('tooltipValueLookups').type == 'hashrate')
+ fields.y = getReadableHashRateString(fields.y)
+ return format.render(fields, options.get('tooltipValueLookups'), options)
+ }
};
-function home_CreateCharts(data) {
+function home_CreateCharts (data) {
if (data.hasOwnProperty("charts")) {
var graphData = {
- hashrate: home_GetGraphData(data.charts.hashrate),
- diff: home_GetGraphData(data.charts.difficulty),
- miners: home_GetGraphData(data.charts.miners),
- workers: home_GetGraphData(data.charts.workers)
+ hashrate: {
+ data: [home_GetGraphData(data.charts.hashrate), home_GetGraphData(data.charts.hashrateSolo)],
+ options: {
+ lineColor: 'orange'
+ }
+ },
+ diff: {
+ data: [home_GetGraphData(data.charts.difficulty)]
+ },
+ miners: {
+ data: [home_GetGraphData(data.charts.miners), home_GetGraphData(data.charts.minersSolo)],
+ options: {
+ lineColor: 'orange'
+ }
+ },
+ workers: {
+ data: [home_GetGraphData(data.charts.workers), home_GetGraphData(data.charts.workersSolo)],
+ options: {
+ lineColor: 'orange'
+ }
+ },
};
for(var graphType in graphData) {
- if(graphData[graphType].values.length > 1) {
- var settings = jQuery.extend({}, home_GraphSettings);
- settings.tooltipValueLookups = {names: graphData[graphType].names};
- var $chart = $('[data-chart=' + graphType + '] .chart');
- $chart.closest('.poolChart').show();
- $chart.sparkline(graphData[graphType].values, settings);
+ if(graphData[graphType].data[0].values.length > 1) {
+ var settings = jQuery.extend({}, home_GraphSettings);
+ settings.tooltipValueLookups = {names: graphData[graphType].data[0].names, type: graphType};
+ var $chart = $('[data-chart=' + graphType + '] .chart');
+ $chart.closest('.poolChart').show();
+ $chart.sparkline(graphData[graphType].data[0].values, settings);
+ if (graphData[graphType].data[1]) {
+ settings.composite = true
+ settings.lineColor = graphData[graphType].options.lineColor
+ $chart.sparkline(graphData[graphType].data[1].values, settings);
+ }
+ }
}
- }
+
}
}
// Get chart data
-function home_GetGraphData(rawData, fixValueToCoins) {
+function home_GetGraphData (rawData, fixValueToCoins) {
var graphData = {
names: [],
values: []
};
- if(rawData) {
+ if (rawData) {
for (var i = 0, xy; xy = rawData[i]; i++) {
- graphData.names.push(new Date(xy[0]*1000).toLocaleString());
+ graphData.names.push(new Date(xy[0] * 1000)
+ .toLocaleString());
graphData.values.push(fixValueToCoins ? getReadableCoin(lastStats, xy[1], null, true) : xy[1]);
}
}
-
return graphData;
}
-function home_GenerateNetworkStats(key, symbol) {
- if ($(`#networkStats${key}`).length == 0) {
- let template = $('#siblingTemplate').html()
+function home_GenerateNetworkStats (key, symbol) {
+ if ($(`#networkStats${key}`)
+ .length == 0) {
+ let template = $('#siblingTemplate')
+ .html()
if (template) {
Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:key, symbol: symbol})
- $(`#networkStats`).append(rendered)
+ let rendered = Mustache.render(template, {
+ coin: key,
+ symbol: symbol
+ })
+ $(`#networkStats`)
+ .append(rendered)
}
}
}
-function sortElementList(container, siblings, stats) {
- let sorted = (a,b) => {
+function sortElementList (container, siblings, stats) {
+ let sorted = (a, b) => {
return ((a.id.toLowerCase() < b.id.toLowerCase()) ? -1 : ((a.id.toLowerCase() > b.id.toLowerCase()) ? 1 : 0))
}
- if (stats && siblings.length -1 === Object.keys(stats).length) {
- siblings.sort(sorted).appendTo(container)
+ if (stats && siblings.length - 1 === Object.keys(stats)
+ .length) {
+ siblings.sort(sorted)
+ .appendTo(container)
}
}
-function home_InitTemplate(parentStats, siblingStats) {
- $('#networkLastBlockFound').timeago('update', new Date(parentStats.lastblock.timestamp * 1000).toISOString());
+function home_InitTemplate (parentStats, siblingStats) {
+ $('#networkLastBlockFound')
+ .timeago('update', new Date(parentStats.lastblock.timestamp * 1000)
+ .toISOString());
let coin = parentStats.config.coin
let minerInfo = []
let efforts = []
+ let effortsSolo = []
- if ($(`#networkStats${coin}`).length == 0) {
- minerInfo.push({blocks: parentStats.pool.totalBlocks.toString(),
- blocksSolo: parentStats.pool.totalBlocksSolo.toString(),
- coin: coin,
- symbol: parentStats.config.symbol,
- miners: parentStats.pool.miners.toString(),
- minersSolo: parentStats.pool.minersSolo.toString()})
-
- efforts.push({coin: coin, effort: `${(parentStats.pool.roundHashes / parentStats.network.difficulty * 100).toFixed(1)}%`,symbol: parentStats.config.symbol})
-
- let template = $('#siblingTemplate').html()
+ if ($(`#networkStats${coin}`)
+ .length == 0) {
+ minerInfo.push({
+ blocks: parentStats.pool.totalBlocks.toString(),
+ blocksSolo: parentStats.pool.totalBlocksSolo.toString(),
+ coin: coin,
+ symbol: parentStats.config.symbol,
+ miners: parentStats.pool.miners.toString(),
+ minersSolo: parentStats.pool.minersSolo.toString()
+ })
+
+ efforts.push({
+ coin: coin,
+ effort: `${(parentStats.pool.roundHashes / parentStats.network.difficulty * 100).toFixed(1)}%`,
+ symbol: parentStats.config.symbol
+ })
+
+ effortsSolo.push({
+ coin: coin,
+ effort: `${(parentStats.pool.roundHashesSolo / parentStats.network.difficulty * 100).toFixed(1)}%`,
+ symbol: parentStats.config.symbol
+ })
+
+ let template = $('#siblingTemplate')
+ .html()
Mustache.parse(template)
- let rendered = Mustache.render(template, {coin: coin, symbol: parentStats.config.symbol})
- $(`#networkStats`).append(rendered)
+ let rendered = Mustache.render(template, {
+ coin: coin,
+ symbol: parentStats.config.symbol
+ })
+ $(`#networkStats`)
+ .append(rendered)
}
let lastBlockFound = null
@@ -2211,63 +2953,112 @@ function home_InitTemplate(parentStats, siblingStats) {
lastBlockFound = parseInt(parentStats.pool.lastBlockFound);
}
+ let lastBlockFoundSolo = null
+ if (parentStats.pool.lastBlockFoundSolo) {
+ lastBlockFoundSolo = parseInt(parentStats.pool.lastBlockFoundSolo);
+ }
- updateText(`networkHashrate${coin}`, getReadableHashRateString(parentStats.network.difficulty / parentStats.config.coinDifficultyTarget) + '/sec');
+
+ updateText(`networkHashrate${coin}`, `${getReadableHashRateString(parentStats.network.networkhashps)}/sec`)
updateText(`networkDifficulty${coin}`, formatNumber(parentStats.network.difficulty.toString(), ' '));
updateText(`blockchainHeight${coin}`, formatNumber(parentStats.network.height.toString(), ' '));
- updateText(`networkLastReward${coin}`, getReadableCoin(parentStats, parentStats.lastblock.reward));
+ let rewardMinusNetworkFee = parentStats.lastblock.reward - (parentStats.lastblock.reward * (parentStats.config.networkFee ? parentStats.config.networkFee / 100 : 0))
+ updateText(`networkLastReward${coin}`, getReadableCoin(parentStats, rewardMinusNetworkFee));
- Object.keys(siblingStats).forEach(key => {
- home_GenerateNetworkStats(key, siblingStats[key].config.symbol)
-
- minerInfo.push({blocks: siblingStats[key].pool.totalBlocks.toString(),
- blocksSolo: siblingStats[key].pool.totalBlocksSolo.toString(),
- coin: key,
- symbol: siblingStats[key].config.symbol,
- miners: siblingStats[key].pool.miners.toString(),
- minersSolo: siblingStats[key].pool.minersSolo.toString()})
-
- efforts.push({coin: key, effort: `${(siblingStats[key].pool.roundHashes / siblingStats[key].network.difficulty * 100).toFixed(1)}%`, symbol: siblingStats[key].config.symbol});
+ Object.keys(siblingStats)
+ .forEach(key => {
+ home_GenerateNetworkStats(key, siblingStats[key].config.symbol)
- if (siblingStats[key].pool.lastBlockFound) {
- let lastChildBlockFound = parseInt(siblingStats[key].pool.lastBlockFound)
- if (lastChildBlockFound > lastBlockFound)
- lastBlockFound = lastChildBlockFound
- }
+ minerInfo.push({
+ blocks: siblingStats[key].pool.totalBlocks.toString(),
+ blocksSolo: siblingStats[key].pool.totalBlocksSolo.toString(),
+ coin: key,
+ symbol: siblingStats[key].config.symbol,
+ miners: siblingStats[key].pool.miners.toString(),
+ minersSolo: siblingStats[key].pool.minersSolo.toString()
+ })
- updateText(`networkHashrate${key}`, getReadableHashRateString(siblingStats[key].network.difficulty / siblingStats[key].config.coinDifficultyTarget) + '/sec');
- updateText(`networkDifficulty${key}`, formatNumber(siblingStats[key].network.difficulty.toString(), ' '));
- updateText(`blockchainHeight${key}`, formatNumber(siblingStats[key].network.height.toString(), ' '));
- updateText(`networkLastReward${key}`, getReadableCoin(siblingStats[key], siblingStats[key].lastblock.reward));
- updateText(`poolMiners${key}`, `${siblingStats[key].pool.miners}/${siblingStats[key].pool.minersSolo}`);
- updateText(`blocksTotal${key}`, `${siblingStats[key].pool.totalBlocks}/${siblingStats[key].pool.totalBlocksSolo}`);
- updateText(`currentEffort${key}`, (siblingStats[key].pool.roundHashes / siblingStats[key].network.difficulty * 100).toFixed(1) + '%');
- })
+ efforts.push({
+ coin: key,
+ effort: `${(siblingStats[key].pool.roundHashes / siblingStats[key].network.difficulty * 100).toFixed(1)}%`,
+ symbol: siblingStats[key].config.symbol
+ });
+
+ effortsSolo.push({
+ coin: key,
+ effort: `${(siblingStats[key].pool.roundHashesSolo / siblingStats[key].network.difficulty * 100).toFixed(1)}%`,
+ symbol: siblingStats[key].config.symbol
+ });
+
+ if (siblingStats[key].pool.lastBlockFound) {
+ let lastChildBlockFound = parseInt(siblingStats[key].pool.lastBlockFound)
+ if (lastChildBlockFound > lastBlockFound)
+ lastBlockFound = lastChildBlockFound
+ }
+
+ updateText(`networkHashrate${key}`, getReadableHashRateString(siblingStats[key].network.difficulty / siblingStats[key].config.coinDifficultyTarget) + '/sec');
+ updateText(`networkDifficulty${key}`, formatNumber(siblingStats[key].network.difficulty.toString(), ' '));
+ updateText(`blockchainHeight${key}`, formatNumber(siblingStats[key].network.height.toString(), ' '));
+ // updateText(`networkLastReward${key}`, getReadableCoin(siblingStats[key], siblingStats[key].lastblock.reward));
+ updateText(`poolMiners${key}`, `${siblingStats[key].pool.miners}/${siblingStats[key].pool.minersSolo}`);
+ updateText(`blocksTotal${key}`, `${siblingStats[key].pool.totalBlocks}/${siblingStats[key].pool.totalBlocksSolo}`);
+ updateText(`currentEffort${key}`, `PROP: ${(siblingStats[key].pool.roundHashes / siblingStats[key].network.difficulty * 100).toFixed(1)}%`)
+ updateText(`currentEffortSolo${key}`, `SOLO: ${(siblingStats[key].pool.roundHashesSolo / siblingStats[key].network.difficulty * 100).toFixed(1)}%`)
+ })
sortElementList($(`#networkStats`), $(`#networkStats>div`), siblingStats)
-
- if ($(`#poolDetails > div`).length == 0) {
- let template = $('#poolDetailTemplate').html()
+
+ if ($(`#poolDetails > div`)
+ .length == 0) {
+ let template = $('#poolDetailTemplate')
+ .html()
Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:parentStats.config.coin, symbol: parentStats.config.symbol, blocks: minerInfo})
- $(`#poolDetails`).append(rendered)
+ let rendered = Mustache.render(template, {
+ coin: parentStats.config.coin,
+ symbol: parentStats.config.symbol,
+ blocks: minerInfo
+ })
+ $(`#poolDetails`)
+ .append(rendered)
}
- if ($(`#mainPoolStats > div`).length == 0) {
- let template = $('#mainPoolTemplate').html()
+ if ($(`#mainPoolStats > div`)
+ .length == 0) {
+ let template = $('#mainPoolTemplate')
+ .html()
Mustache.parse(template)
- let rendered = Mustache.render(template, {coin:parentStats.config.coin, blocks: minerInfo, efforts: efforts})
- $(`#mainPoolStats`).append(rendered)
+ let rendered = Mustache.render(template, {
+ coin: parentStats.config.coin,
+ blocks: minerInfo,
+ efforts: efforts,
+ effortsSolo: effortsSolo
+ })
+ $(`#mainPoolStats`)
+ .append(rendered)
}
-
if (lastBlockFound) {
- $('#poolLastBlockFound').timeago('update', new Date(lastBlockFound).toISOString());
+ $('#poolLastBlockFound')
+ .timeago('update', new Date(lastBlockFound)
+ .toISOString());
+ } else {
+ $('#poolLastBlockFound')
+ .removeAttr('title')
+ .data('ts', '')
+ .update('Never');
}
- else {
- $('#poolLastBlockFound').removeAttr('title').data('ts', '').update('Never');
+
+ if (lastBlockFoundSolo) {
+ $('#poolLastBlockFoundSolo')
+ .timeago('update', new Date(lastBlockFoundSolo)
+ .toISOString());
+ } else {
+ $('#poolLastBlockFoundSolo')
+ .removeAttr('title')
+ .data('ts', '')
+ .update('Never');
}
let lastHash = updateText('lastHash', parentStats.lastblock.hash)
@@ -2279,10 +3070,10 @@ function home_InitTemplate(parentStats, siblingStats) {
updateText('poolHashrateSolo', `SOLO: ${getReadableHashRateString(parentStats.pool.hashrateSolo)}/sec`);
- var hashPowerSolo = parentStats.pool.hashrateSolo / (parentStats.network.difficulty / parentStats.config.coinDifficultyTarget) * 100;
- updateText ('hashPowerSolo', hashPowerSolo.toFixed(2) + '%');
+ var hashPowerSolo = parentStats.pool.hashrateSolo / parentStats.network.networkhashps * 100;
+ updateText('hashPowerSolo', hashPowerSolo.toFixed(2) + '%');
- var hashPower = parentStats.pool.hashrate / (parentStats.network.difficulty / parentStats.config.coinDifficultyTarget) * 100;
+ var hashPower = parentStats.pool.hashrate / parentStats.network.networkhashps * 100;
updateText('hashPower', hashPower.toFixed(2) + '%');
@@ -2291,20 +3082,27 @@ function home_InitTemplate(parentStats, siblingStats) {
var totalFee = parentStats.config.fee;
- if (Object.keys(parentStats.config.donation).length) {
+ var soloFee = parentStats.config.soloFee;
+ if (Object.keys(parentStats.config.donation)
+ .length) {
var totalDonation = 0;
- for(var i in parentStats.config.donation) {
+ for (var i in parentStats.config.donation) {
totalDonation += parentStats.config.donation[i];
}
totalFee += totalDonation;
+ soloFee += totalDonation;
}
- updateText('poolFee', (totalFee > 0 && totalFee != 100 ? floatToString(totalFee) : (totalFee == 100 ? '100' : '0')) + '%');
+ updateText('finderReward', parentStats.config.finderReward + '%');
+
+ updateText('poolFee', (totalFee > 0 && totalFee != 100 ? totalFee.toFixed(2): (totalFee == 100 ? '100' : '0')) + '%/' + soloFee.toFixed(2) + '%');
updateText('paymentsInterval', getReadableTime(parentStats.config.paymentsInterval));
- updateText('paymentsMinimum', getReadableCoin(parentStats, parentStats.config.minPaymentThreshold));
+ updateText('paymentsMinimum', getReadableCoin(parentStats, parentStats.config.minPaymentThreshold, 2, true));
- updateText('blockSolvedTime', getReadableTime(parentStats.network.difficulty / parentStats.pool.hashrate));
+ updateText('blockSolvedTime', `PROP: ${getReadableTime(parentStats.pool.blockSolvedTime)}`);
+ updateText('blockSolvedTimeSolo', `SOLO: ${getReadableTime(parentStats.pool.blockSolvedTimeSolo)}`);
updateText(`currentEffort${coin}`, (parentStats.pool.roundHashes / parentStats.network.difficulty * 100).toFixed(1) + '%');
}
+