yuriy0803 2 years ago
parent
commit
d03ebc9038
  1. 73
      install.sh
  2. 22
      www/app/controllers/account.js
  3. 182
      www/app/controllers/account/index.js
  4. 2
      www/app/controllers/application.js
  5. 504
      www/app/controllers/index.js
  6. 4
      www/app/helpers/format-threshold.js
  7. 7
      www/app/helpers/wallet.js
  8. 2
      www/app/helpers/with-metric-prefix.js
  9. 33
      www/app/index.html
  10. 49
      www/app/models/block.js
  11. 1
      www/app/router.js
  12. 317
      www/app/styles/app.css
  13. 5
      www/app/templates/about.hbs
  14. 55
      www/app/templates/account.hbs
  15. 57
      www/app/templates/account/index.hbs
  16. 68
      www/app/templates/account/mining.hbs
  17. 2
      www/app/templates/account/payouts.hbs
  18. 21
      www/app/templates/account/rewards.hbs
  19. 5
      www/app/templates/account/settings.hbs
  20. 2
      www/app/templates/application.hbs
  21. 9
      www/app/templates/blocks.hbs
  22. 30
      www/app/templates/blocks/block.hbs
  23. 25
      www/app/templates/blocks/immature.hbs
  24. 25
      www/app/templates/blocks/index.hbs
  25. 24
      www/app/templates/blocks/pending.hbs
  26. 2
      www/app/templates/finders.hbs
  27. 13
      www/app/templates/help.hbs
  28. 190
      www/app/templates/index.hbs
  29. 8
      www/app/templates/luck.hbs
  30. 9
      www/app/templates/miners.hbs
  31. 26
      www/app/templates/payments.hbs
  32. 45
      www/config/environment.js

73
install.sh

@ -58,35 +58,94 @@ module.exports = function (environment) {
rootURL: '/', rootURL: '/',
locationType: 'hash', locationType: 'hash',
EmberENV: { EmberENV: {
FEATURES: {} FEATURES: {
// Here you can enable experimental features on an ember canary build
// e.g. 'with-controller': true
}
}, },
APP: { APP: {
// API host and port
ApiUrl: '//$ip_address/', ApiUrl: '//$ip_address/',
HttpHost: 'http://$ip_address',
// HTTP mining endpoint
HttpHost: '$ip_address',
HttpPort: 8888, HttpPort: 8888,
// Stratum mining endpoint
StratumHost: '$ip_address', StratumHost: '$ip_address',
StratumPort: 8008, StratumPort: 8008,
// The ETC network
Unit: 'ETC', Unit: 'ETC',
Currency: 'USD', Mining: 'SOLO',
PoolFee: '1%',
// Fee and payout details
PoolFee: '1.0%',
PayoutThreshold: '0.5 ETC', PayoutThreshold: '0.5 ETC',
BlockReward: 2.56, BlockReward: 2.56,
BlockTime: 13.2
// For network hashrate (change for your favourite fork)
BlockTime: 14.4,
highcharts: {
main: {
enabled: true,
height: 200,
type: 'spline',
color: '',
labelColor: '#909090',
lineColor: '#404850',
tickColor: '#404850',
gridLineColor: '#404850',
gridLineWidthX: 1,
gridLineWidthY: 1,
backgroundColor: 'transparent',
title: '',
ytitle: '',
interval: 180000,
chartInterval: 900000
},
account: {
enabled: true,
height: 300,
type: 'spline',
color: ['', ''],
title: '',
ytitle: '',
interval: 180000,
chartInterval: 900000,
paymentInterval: 30000
}
}
} }
}; };
if (environment === 'development') { if (environment === 'development') {
ENV.APP.ApiUrl = 'http://localhost:8080/'; /* Override ApiUrl just for development, while you are customizing
frontend markup and css theme on your workstation.
*/
ENV.APP.ApiUrl = 'http://localhost:8080/'
// ENV.APP.LOG_RESOLVER = true;
// ENV.APP.LOG_ACTIVE_GENERATION = true;
// ENV.APP.LOG_TRANSITIONS = true;
// ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
// ENV.APP.LOG_VIEW_LOOKUPS = true;
} }
if (environment === 'test') { if (environment === 'test') {
// Testem prefers this...
ENV.locationType = 'none'; ENV.locationType = 'none';
// keep test console output quieter
ENV.APP.LOG_ACTIVE_GENERATION = false; ENV.APP.LOG_ACTIVE_GENERATION = false;
ENV.APP.LOG_VIEW_LOOKUPS = false; ENV.APP.LOG_VIEW_LOOKUPS = false;
ENV.APP.rootElement = '#ember-testing'; ENV.APP.rootElement = '#ember-testing';
} }
if (environment === 'production') {} if (environment === 'production') {
}
return ENV; return ENV;
}; };

22
www/app/controllers/account.js

@ -16,6 +16,12 @@ export default Ember.Controller.extend({
}, },
}), }),
roundSharesN: Ember.computed("stats", "model", {
get() {
return parseInt(this.get("model.stats.roundShares") / 10000000000);
},
}),
roundPercent: Ember.computed('stats', 'model', { roundPercent: Ember.computed('stats', 'model', {
get() { get() {
var percent = this.get('model.roundShares') / this.get('stats.nShares'); var percent = this.get('model.roundShares') / this.get('stats.nShares');
@ -30,25 +36,11 @@ export default Ember.Controller.extend({
} }
}), }),
earnPerDayToken: Ember.computed('model', { earnPerDay: Ember.computed('model', {
get() { get() {
return 24 * 60 * 60 / this.get('applicationController.blockTime') * this.get('config').BlockReward * return 24 * 60 * 60 / this.get('applicationController.blockTime') * this.get('config').BlockReward *
this.getWithDefault('model.hashrate') / this.get('hashrate'); this.getWithDefault('model.hashrate') / this.get('hashrate');
} }
}),
earnPerDayUsd: Ember.computed('model', {
get() {
return 24 * 60 * 60 / this.get('applicationController.blockTime') * this.get('config').BlockReward *
this.getWithDefault('model.hashrate') / this.get('hashrate') * this.get ('model.exchangedata.price_usd');
}
}),
earnTotalPaid: Ember.computed('model', {
get() {
return 1 * this.get ('model.exchangedata.price_usd') * this.get ('model.stats.paid');
}
}) })
}); });

182
www/app/controllers/account/index.js

@ -14,13 +14,13 @@ export default Ember.Controller.extend({
a = { a = {
chart: { chart: {
backgroundColor: "rgba(255, 255, 255, 0.1)", backgroundColor: "rgba(255, 255, 255, 0.1)",
type: "spline", type: "column",
marginRight: 10, marginRight: 10,
height: 290, height: 300,
events: { events: {
load: function () { load: function() {
var series = this.series[0]; var series = this.series[0];
setInterval(function () { setInterval(function() {
var x = (new Date()).getTime(), var x = (new Date()).getTime(),
y = e.getWithDefault("model.currentHashrate") / 1000000; y = e.getWithDefault("model.currentHashrate") / 1000000;
series.addPoint([x, y], true, true); series.addPoint([x, y], true, true);
@ -31,67 +31,8 @@ export default Ember.Controller.extend({
title: { title: {
text: "" text: ""
}, },
//////
rangeSelector: {
enabled: true,
selected: 4,
allButtonsEnabled: true,
inputDateFormat: '%Y/%m/%d %H:%M',
inputEditDateFormat: '%Y/%m/%d %H:%M',
inputEnabled: false,
buttons: [{
type: 'hour',
count: 1,
text: '1h'
},
{
type: 'hour',
count: 2,
text: '2h'
},
{
type: 'hour',
count: 4,
text: '4h'
},
{
type: 'hour',
count: 6,
text: '6h'
},
{
type: 'hour',
count: 12,
text: '12h'
},
{
type: 'all',
text: 'All'
}
],
},
navigator: {
enabled: true
},
credits: {
enabled: false,
position: {
align: 'right',
x: -10,
verticalAlign: 'bottom',
y: -5
},
href: "https://highcharts.com",
text: "Highcharts"
},
///////
xAxis: { xAxis: {
ordinal: false, ordinal: false,
labels: {
style: {
color: "#000"
}
},
type: "datetime", type: "datetime",
dateTimeLabelFormats: { dateTimeLabelFormats: {
millisecond: "%H:%M:%S", millisecond: "%H:%M:%S",
@ -106,18 +47,11 @@ export default Ember.Controller.extend({
}, },
yAxis: { yAxis: {
title: { title: {
text: "Hashrate", text: "HASHRATE"
style: {
color: "#000"
}, },
}, //min: 0,
labels: { softMin: e.getWithDefault("model.currentHashrate") / 1.1,
style: { softMax: e.getWithDefault("model.currentHashrate") * 1.2
color: "#000"
}
},
//softMin: e.getWithDefault("model.currentHashrate") / 1000000,
//softMax: e.getWithDefault("model.currentHashrate") / 1000000,
}, },
plotLines: [{ plotLines: [{
value: 0, value: 0,
@ -125,27 +59,41 @@ export default Ember.Controller.extend({
color: "#808080" color: "#808080"
}], }],
legend: { legend: {
enabled: true, enabled: true
itemStyle:
{
color: "#000"
},
}, },
tooltip: { tooltip: {
formatter: function () { formatter: function() {
return this.y > 1000000000000 ? "<b>" + this.point.d + "<b><br>Hashrate&nbsp;" + (this.y / 1000000000000).toFixed(2) + "&nbsp;TH/s</b>" : this.y > 1000000000 ? "<b>" + this.point.d + "<b><br>Hashrate&nbsp;" + (this.y / 1000000000).toFixed(2) + "&nbsp;GH/s</b>" : this.y > 1000000 ? "<b>" + this.point.d + "<b><br>Hashrate&nbsp;" + (this.y / 1000000).toFixed(2) + "&nbsp;MH/s</b>" : "<b>" + this.point.d + "<b><br>Hashrate&nbsp;<b>" + this.y.toFixed(2) + "&nbsp;H/s</b>"; return this.y > 1000000000000 ? "<b>" + this.point.d + "<b><br>Hashrate&nbsp;" + (this.y / 1000000000000).toFixed(2) + "&nbsp;TH/s</b>" : this.y > 1000000000 ? "<b>" + this.point.d + "<b><br>Hashrate&nbsp;" + (this.y / 1000000000).toFixed(2) + "&nbsp;GH/s</b>" : this.y > 1000000 ? "<b>" + this.point.d + "<b><br>Hashrate&nbsp;" + (this.y / 1000000).toFixed(2) + "&nbsp;MH/s</b>" : "<b>" + this.point.d + "<b><br>Hashrate&nbsp;<b>" + this.y.toFixed(2) + "&nbsp;H/s</b>";
}, },
useHTML: true useHTML: true
}, },
exporting: { exporting: {
enabled: true enabled: false
},
navigation: {
enabled: true,
},
scrollbar: {
barBackgroundColor: 'gray',
barBorderRadius: 7,
barBorderWidth: 0,
buttonBackgroundColor: 'gray',
buttonBorderWidth: 0,
buttonBorderRadius: 7,
trackBackgroundColor: 'none',
trackBorderWidth: 1,
trackBorderRadius: 8,
trackBorderColor: '#CCC'
}, },
series: [{ series: [{
color: "#15BD27", color: "#E99002",
name: "3 hours average hashrate", name: "Average Hashrate",
data: function () { type: 'spline',
tooltip: {
valueDecimals: 2
},
data: function() {
var e, a = []; var e, a = [];
if (null != t) { if (null != t) {
for (e = 0; e <= t.length - 1; e += 1) { for (e = 0; e <= t.length - 1; e += 1) {
@ -161,8 +109,7 @@ export default Ember.Controller.extend({
y: n y: n
}); });
} }
} else { } else { a.push({
a.push({
x: 0, x: 0,
d: 0, d: 0,
y: 0 y: 0
@ -171,9 +118,12 @@ export default Ember.Controller.extend({
return a; return a;
}() }()
}, { }, {
name: "30 minutes average hashrate", name: "Current hashrate",
color: "#E99002", type: 'spline',
data: function () { tooltip: {
valueDecimals: 2
},
data: function() {
var e, a = []; var e, a = [];
if (null != t) { if (null != t) {
for (e = 0; e <= t.length - 1; e += 1) { for (e = 0; e <= t.length - 1; e += 1) {
@ -189,8 +139,7 @@ export default Ember.Controller.extend({
y: n y: n
}); });
} }
} else { } else { a.push({
a.push({
x: 0, x: 0,
d: 0, d: 0,
y: 0 y: 0
@ -198,9 +147,15 @@ export default Ember.Controller.extend({
} }
return a; return a;
}() }()
}] }]
}; };
a.title.text = this.get('config.highcharts.account.title') || "";
a.yAxis.title.text = this.get('config.highcharts.account.ytitle') || "Hashrate";
a.chart.height = this.get('config.highcharts.account.height') || 300;
a.chart.type = this.get('config.highcharts.account.type') || 'spline';
var colors = this.get('config.highcharts.account.color');
a.series[0].color = colors[0] || 'rgba(25,148,184)';
a.series[1].color = colors[1] || 'rgba(233,144,2)';
return a; return a;
} }
}), }),
@ -294,7 +249,7 @@ export default Ember.Controller.extend({
}, },
}, },
tooltip: { tooltip: {
formatter: function () { formatter: function() {
return this.y > 1000000000000 ? "<b>" + this.point.d + "<b><br>Shares&nbsp;" + (this.y / 1000000000000) + "</b>" : this.y > 1000000000 ? "<b>" + this.point.d + "<b><br>Shares&nbsp;" + (this.y / 1000000000) + "</b>" : this.y > 1000000 ? "<b>" + this.point.d + "<b><br>Shares&nbsp;" + (this.y / 1000000) + "</b>" : "<b>" + this.point.d + "<b><br>Shares&nbsp;<b>" + this.y + "</b>"; return this.y > 1000000000000 ? "<b>" + this.point.d + "<b><br>Shares&nbsp;" + (this.y / 1000000000000) + "</b>" : this.y > 1000000000 ? "<b>" + this.point.d + "<b><br>Shares&nbsp;" + (this.y / 1000000000) + "</b>" : this.y > 1000000 ? "<b>" + this.point.d + "<b><br>Shares&nbsp;" + (this.y / 1000000) + "</b>" : "<b>" + this.point.d + "<b><br>Shares&nbsp;<b>" + this.y + "</b>";
}, },
@ -307,7 +262,7 @@ export default Ember.Controller.extend({
series: [{ series: [{
color: "#15BD27", color: "#15BD27",
name: "Valid share", name: "Valid share",
data: function () { data: function() {
var e, a = []; var e, a = [];
if (null != t) { if (null != t) {
for (e = 0; e <= t.length - 1; e += 1) { for (e = 0; e <= t.length - 1; e += 1) {
@ -337,7 +292,7 @@ export default Ember.Controller.extend({
name: "Stale share", name: "Stale share",
color: "#E99002", color: "#E99002",
data: function () { data: function() {
var e, a = []; var e, a = [];
if (null != t) { if (null != t) {
for (e = 0; e <= t.length - 1; e += 1) { for (e = 0; e <= t.length - 1; e += 1) {
@ -402,36 +357,5 @@ export default Ember.Controller.extend({
}; };
return a; return a;
} }
}), })
earnPerHour: Ember.computed('model', {
get() {
return 1 * 60 * 60 / this.get('config').BlockTime * this.get('config').BlockReward *
this.getWithDefault('model.hashrate') / this.get('hashrate');
}
}),
earnPerHour12: Ember.computed('model', {
get() {
return 12 * 60 * 60 / this.get('config').BlockTime * this.get('config').BlockReward *
this.getWithDefault('model.hashrate') / this.get('hashrate');
}
}),
earnPerDay: Ember.computed('model', {
get() {
return 24 * 60 * 60 / this.get('config').BlockTime * this.get('config').BlockReward *
this.getWithDefault('model.hashrate') / this.get('hashrate');
}
}),
earnPerWeek: Ember.computed('model', {
get() {
return 168 * 60 * 60 / this.get('config').BlockTime * this.get('config').BlockReward *
this.getWithDefault('model.hashrate') / this.get('hashrate');
}
}),
earnPerMonth: Ember.computed('model', {
get() {
return 672 * 60 * 60 / this.get('config').BlockTime * this.get('config').BlockReward *
this.getWithDefault('model.hashrate') / this.get('hashrate');
}
}),
}); });

2
www/app/controllers/application.js

@ -100,7 +100,7 @@ export default Ember.Controller.extend({
nextEpoch: Ember.computed('height', { nextEpoch: Ember.computed('height', {
get() { get() {
var epochOffset = (60000 - (this.getWithDefault('height', 1) % 60000)) * 1000 * this.get('blockTime'); var epochOffset = (60000 - (this.getWithDefault('height', 1) % 30000)) * 1000 * this.get('blockTime');
return Date.now() + epochOffset; return Date.now() + epochOffset;
} }
}) })

504
www/app/controllers/index.js

@ -1,305 +1,338 @@
function formatDate(date, format) { import Ember from 'ember';
date = new Date(date);
var formattedDate = {
year: date.getFullYear(),
month: date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1,
day: date.getDate() < 10 ? "0" + date.getDate() : date.getDate(),
hours: date.getHours() < 10 ? "0" + date.getHours() : date.getHours(),
minutes: date.getMinutes() < 10 ? "0" + date.getMinutes() : date.getMinutes(),
seconds: date.getSeconds() < 10 ? "0" + date.getSeconds() : date.getSeconds(),
};
for (var key in formattedDate) {
format = format.replace(key, formattedDate[key]);
}
return format;
}
function formatHashrate(hashrate, showUnit) {
var units = ["H/s", "KH/s", "MH/s", "GH/s", "TH/s", "PH/s"];
var index = 0;
while (hashrate > 1e3) {
hashrate /= 1e3;
index++;
}
return showUnit
? hashrate.toFixed(2) + " " + units[index]
: hashrate.toFixed(2) + " " + units[index];
}
function formatNumber(number) {
var units = ["H/s", "KH/s", "MH/s", "GH/s", "TH/s", "PH/s"];
var index = 0;
while (number >= 1e3) {
number /= 1e3;
index++;
}
number = number < 10 ? number.toFixed(2) : number.toFixed(2);
return number.replace(".00", "") + " " + units[index];
}
import Ember from "ember";
export default Ember.Controller.extend({ export default Ember.Controller.extend({
applicationController: Ember.inject.controller("application"), applicationController: Ember.inject.controller('application'),
stats: Ember.computed.reads("applicationController"), stats: Ember.computed.reads('applicationController'),
config: Ember.computed.reads("applicationController.config"), config: Ember.computed.reads('applicationController.config'),
cachedLogin: Ember.computed("login", { cachedLogin: Ember.computed('login', {
get() { get() {
return this.get("login") || Ember.$.cookie("login"); return this.get('login') || Ember.$.cookie('login');
}, },
set(key, value) { set(key, value) {
Ember.$.cookie("login", value); Ember.$.cookie('login', value);
this.set("model.login", value); this.set('model.login', value);
return value; return value;
}, }
}), }),
chartOptions: Ember.computed("model.hashrate", "model.poolCharts", "model.netCharts", { chartOptions: Ember.computed("model.hashrate", {
get() { get() {
var now = new Date(); var now = new Date();
var e = this, var e = this,
t = e.getWithDefault("model.poolCharts", []), t = e.getWithDefault("stats.model.poolCharts"),
netCharts = e.getWithDefault("model.netCharts", []),
a = { a = {
chart: { chart: {
backgroundColor: "rgba(48, 97, 63, 0.0) ", backgroundColor: "rgba(255, 255, 255, 0.1)",
type: "areaspline", type: "spline",
height: 270, height: 300,
ignoreHiddenSeries: !1, marginRight: 10,
events: { events: {
load: function () { load: function() {
var self = this; var self = this;
var chartInterval = setInterval(function() {
var chartInterval = setInterval(function () { if (!self.series) {
var series = self.series;
if (!series) {
clearInterval(chartInterval); clearInterval(chartInterval);
return; return;
} }
var series = self.series[0];
t = e.getWithDefault("model.poolCharts", []);
netCharts = e.getWithDefault("model.netCharts", []);
// Hashrate chart
var hashData = [];
t.forEach(function (entry) {
var x = new Date(1000 * entry.x);
var l = x.toLocaleString();
var y = entry.y;
hashData.push({ x: x, y: y, d: l });
});
// Point for now
var now = new Date(); var now = new Date();
var l = now.toLocaleString();
var y = e.getWithDefault("model.hashrate");
var lastHash = { x: now, y: y, d: l };
{ hashData.push(lastHash); }
// Network Difficulty chart var shift = false;
var netDiffData = []; // partially update chart
netCharts.forEach(function (entry) { if (now - series.data[0].x > 18*60*60*1000) {
var x = new Date(1000 * entry.x); // show 18 hours ~ 15(min) * 74(points) ~ poolChartsNum: 74, poolChars: "0 */15 ..."
var l = x.toLocaleString(); shift = true;
var y = entry.y; }
netDiffData.push({ x: x, y: y, d: l }); // check latest added temporary point and remove tempory added point for less than 5 minutes
}); if (series.data.length > 1 && series.data[series.data.length - 1].x - series.data[series.data.length - 2].x < 5*60*1000) {
series.removePoint(series.data.length - 1, false, false);
series[0].setData(hashData, true, {}, true); }
series[1].setData(netDiffData, true, {}, true); var x = now, y = e.getWithDefault("model.hashrate");
var d = x.toLocaleString();
}, 88 * 1000); series.addPoint({x: x, y: y, d:d}, true, shift);
}, }, e.get('config.highcharts.main.interval') || 60000);
}, }
}
}, },
title: { title: {
text: '<b>Ethereum Classic - PPLNS </b>', text: "Our pool's hashrate"
align: 'center',
x: 0,
y: 15,
useHTML: false,
style: {
color: "rgba(0,0,0,0.76)",
fontSize: '15px',
fontFamily: 'Arial',
fontWeight: '400'
}
}, },
xAxis: { xAxis: {
ordinal: false,
gridLineWidth: 1,
type: "datetime",
labels: { labels: {
style: { style: {
color: "#000", color: "#000"
}, }
formatter: function () {
return formatDate(this.value, "hours:minutes");
}, },
ordinal: false,
type: "datetime",
dateTimeLabelFormats: {
millisecond: "%H:%M:%S",
//second: "%H:%M:%S",
second: "%H:%M",
minute: "%H:%M",
hour: "%H:%M",
day: "%d.%m.%y",
week: "%m/%d",
month: "%b '%y",
year: "%Y"
}, },
gridLineWidth: 1,
gridLineColor: "#e6e6e6"
}, },
yAxis: [ yAxis: {
{
index: 0,
tickAmount: 4,
title: { title: {
text: "Pool Hashrate", text: " Pool Hash Rate",
style: { style: {
color: "#32e400", color: "#000"
}, }
}, },
min: 0,
labels: { labels: {
enabled: true,
style: { style: {
color: "#000", color: "#000"
}
}, },
formatter: function () { gridLineWidth: 1,
return formatNumber(this.value); gridLineColor: "#e6e6e6"
}, },
plotLines: [{
value: 0,
width: 1,
color: "#000"
}],
legend: {
enabled: false
},
tooltip: {
formatter: function() {
function scale(v) {
var f = v;
var units = ['', 'K', 'M', 'G', 'T'];
for (var i = 0; i < 5 && f > 1000; i++) {
f /= 1000;
}
return f.toFixed(2) + ' ' + units[i];
}
var h = scale(this.point.y);
return "<b>" + this.point.d + "</b><br />" +
"<b>Pool Hashrate&nbsp;" + h + "H/s</b>"
}, },
useHTML: true
}, },
{ exporting: {
index: 1, enabled: false
tickAmount: 4, },
title: { plotOptions: {
text: "NETWORK DIFFICULTY", line: {
style: { pointInterval: 5
color: "#007BFF",
}, },
pointInterval:10
}, },
min: 0, series: [{
color: "#1994b8",
name: "Hashrate",
shadow: true,
data: function() {
var a = [];
if (null != t) {
t.forEach(function(d) {
var x = new Date(1000 * d.x);
var l = x.toLocaleString();
var y = d.y;
a.push({x: x, y: y, d: l});
});
}
var l = now.toLocaleString();
var y = e.getWithDefault("model.hashrate");
var last = {x: now, y: y, d: l};
var interval = e.get('config.highcharts.main.interval') || 60000;
if (a.length > 0 && now - a[a.length - 1].x > interval) {
a.push(last);
}
return a;
}()
}]
};
a.title.text = this.getWithDefault('config.highcharts.main.title', "");
a.yAxis.title.text = this.getWithDefault('config.highcharts.main.ytitle', "Pool Hashrate");
a.chart.height = this.getWithDefault('config.highcharts.main.height', 300);
a.chart.type = this.getWithDefault('config.highcharts.main.type', 'spline');
a.chart.backgroundColor = this.getWithDefault('config.highcharts.main.backgroundColor', "rgba(255, 255, 255, 0.1)");
a.xAxis.labels.style.color = this.getWithDefault('config.highcharts.main.labelColor', "#000");
a.yAxis.labels.style.color = this.getWithDefault('config.highcharts.main.labelColor', "#000");
a.yAxis.title.style.color = this.getWithDefault('config.highcharts.main.labelColor', "#000");
a.xAxis.gridLineColor = this.getWithDefault('config.highcharts.main.gridLineColor', "#e6e6e6");
a.yAxis.gridLineColor = this.getWithDefault('config.highcharts.main.gridLineColor', "#e6e6e6");
a.xAxis.gridLineWidth = this.getWithDefault('config.highcharts.main.gridLineWidthX', "0");
a.yAxis.gridLineWidth = this.getWithDefault('config.highcharts.main.gridLineWidthY', "1");
a.xAxis.lineColor = this.getWithDefault('config.highcharts.main.lineColor', "#ccd6eb");
a.yAxis.lineColor = this.getWithDefault('config.highcharts.main.lineColor', "#ccd6eb");
a.xAxis.tickColor = this.getWithDefault('config.highcharts.main.tickColor', "#ccd6eb");
a.yAxis.tickColor = this.getWithDefault('config.highcharts.main.tickColor', "#ccd6eb");
return a;
}
}),
chartDiff: Ember.computed("model.hashrate", {
get() {
var now = new Date();
var e = this,
t = e.getWithDefault("stats.model.netCharts"),
a = {
chart: {
backgroundColor: "rgba(255, 255, 255, 0.1)",
type: "spline",
height: 300,
marginRight: 10,
events: {
load: function() {
var self = this;
var chartInterval = setInterval(function() {
if (!self.series) {
clearInterval(chartInterval);
return;
}
var series = self.series[0];
var now = new Date();
var shift = false;
// partially update chart
if (now - series.data[0].x > 18*60*60*1000) {
// show 18 hours ~ 15(min) * 74(points) ~ poolChartsNum: 74, poolChars: "0 */15 ..."
shift = true;
}
// check latest added temporary point and remove tempory added point for less than 5 minutes
if (series.data.length > 1 && series.data[series.data.length - 1].x - series.data[series.data.length - 2].x < 5*60*1000) {
series.removePoint(series.data.length - 1, false, false);
}
var x = now, y = e.getWithDefault("stats.model.netCharts");
var d = x.toLocaleString();
series.addPoint({x: x, y: y, d:d}, true, shift);
}, e.get('config.highcharts.main.interval') || 60000);
}
}
},
title: {
text: "Our pool's hashrate"
},
xAxis: {
labels: { labels: {
enabled: true,
style: { style: {
color: "#000", color: "#000"
}, }
formatter: function () {
return formatNumber(this.value);
}, },
ordinal: false,
type: "datetime",
dateTimeLabelFormats: {
millisecond: "%H:%M:%S",
//second: "%H:%M:%S",
second: "%H:%M",
minute: "%H:%M",
hour: "%H:%M",
day: "%d.%m.%y",
week: "%m/%d",
month: "%b '%y",
year: "%Y"
}, },
opposite: true, gridLineWidth: 1,
gridLineColor: "#e6e6e6"
}, },
], yAxis: {
plotOptions: { title: {
areaspline: { text: " Pool Hash Rate",
marker: { style: {
enabled: false, color: "#000"
}
}, },
labels: {
style: {
color: "#000"
}
}, },
gridLineWidth: 1,
gridLineColor: "#e6e6e6"
}, },
plotLines: [ plotLines: [{
{
value: 0, value: 0,
width: 1, width: 1,
color: "#000", color: "#000"
}, }],
],
legend: { legend: {
symbolRadius: 4, enabled: false
borderWidth: 1,
itemStyle: {
color: "rgba(0,0,0,0.76)",
},
itemHoverStyle: {
color: "#000000",
},
itemHiddenStyle: {
color: "#A8A2A2",
},
}, },
tooltip: { tooltip: {
borderRadius: 7, formatter: function() {
borderWidth: 1, function scale(v) {
shared: false, var f = v;
headerFormat: "", var units = ['', 'K', 'M', 'G', 'T', 'P'];
shared: false, for (var i = 0; i < 5 && f > 1000; i++) {
headerFormat: "", f /= 1000;
}, }
exporting: { return f.toFixed(2) + ' ' + units[i];
enabled: false, }
}, var h = scale(this.point.y);
series: [
{ return "<b>" + this.point.d + "</b><br />" +
yAxis: 0, "<b>Network Difficulty&nbsp;" + h + "H/s</b>"
name: "Pool Hashrate",
fillColor: "rgba(49, 227, 0, 0.22)",
color: "#32e400",
tooltip: {
pointFormatter: function () {
return (
formatDate(this.x, "day.month.year hours:minutes") +
"<br><b>Pool Hashrate: " +
formatHashrate(this.y, true) +
"</b>"
);
},
}, },
states: { useHTML: true
inactive: {
opacity: 0.1,
}, },
exporting: {
enabled: false
}, },
data: function () { plotOptions: {
var hashData = []; line: {
pointInterval: 5
},
pointStart: Date.UTC(2022, 0, 1),
pointInterval: 24 * 3600 * 1000 // one day
},
series: [{
color: "#e99002",
name: "Hashrate",
shadow: true,
data: function() {
var a = [];
if (null != t) { if (null != t) {
t.forEach(function (entry) { t.forEach(function(d) {
var x = new Date(1000 * entry.x); var x = new Date(1000 * d.x);
var l = x.toLocaleString(); var l = x.toLocaleString();
var y = entry.y; var y = d.y;
hashData.push({ x: x, y: y, d: l }); a.push({x: x, y: y, d: l});
}); });
} }
var l = now.toLocaleString(); var l = now.toLocaleString();
var y = e.getWithDefault("model.hashrate"); var y = e.getWithDefault("stats.model.netCharts");
var lastHash = { x: now, y: y, d: l }; var last = {x: now, y: y, d: l};
{ hashData.push(lastHash); } var interval = e.get('config.highcharts.main.interval') || 60000;
if (a.length > 0 && now - a[a.length - 1].x > interval) {
return hashData; a.push(last);
}()
},
{
yAxis: 1,
name: "NETWORK DIFFICULTY",
fillColor: "rgba(212, 175, 55, 0.35)",
color: "#007BFF",
tooltip: {
pointFormatter: function () {
return (
formatDate(this.x, "day.month.year hours:minutes") +
"<br><b>NETWORK DIFFICULTY: " +
formatNumber(this.y) +
"</b>"
);
},
},
states: {
inactive: {
opacity: 0.1,
},
},
data: function () {
var netDiffData = [];
if (null != netCharts) {
netCharts.forEach(function (entry) {
var x = new Date(1000 * entry.x);
var l = x.toLocaleString();
var y = entry.y;
netDiffData.push({ x: x, y: y, d: l });
});
} }
return a;
return netDiffData;
}() }()
}, }]
],
}; };
a.title.text = this.getWithDefault('config.highcharts.main.title', "");
a.yAxis.title.text = this.getWithDefault('config.highcharts.main.ytitle', "Pool Hashrate");
a.chart.height = this.getWithDefault('config.highcharts.main.height', 300);
a.chart.type = this.getWithDefault('config.highcharts.main.type', 'spline');
a.chart.backgroundColor = this.getWithDefault('config.highcharts.main.backgroundColor', "rgba(255, 255, 255, 0.1)");
a.xAxis.labels.style.color = this.getWithDefault('config.highcharts.main.labelColor', "#000");
a.yAxis.labels.style.color = this.getWithDefault('config.highcharts.main.labelColor', "#000");
a.yAxis.title.style.color = this.getWithDefault('config.highcharts.main.labelColor', "#000");
a.xAxis.gridLineColor = this.getWithDefault('config.highcharts.main.gridLineColor', "#e6e6e6");
a.yAxis.gridLineColor = this.getWithDefault('config.highcharts.main.gridLineColor', "#e6e6e6");
a.xAxis.gridLineWidth = this.getWithDefault('config.highcharts.main.gridLineWidthX', "0");
a.yAxis.gridLineWidth = this.getWithDefault('config.highcharts.main.gridLineWidthY', "1");
a.xAxis.lineColor = this.getWithDefault('config.highcharts.main.lineColor', "#ccd6eb");
a.yAxis.lineColor = this.getWithDefault('config.highcharts.main.lineColor', "#ccd6eb");
a.xAxis.tickColor = this.getWithDefault('config.highcharts.main.tickColor', "#ccd6eb");
a.yAxis.tickColor = this.getWithDefault('config.highcharts.main.tickColor', "#ccd6eb");
return a; return a;
}, }
}), }),
dag: Ember.computed("stats", "model", { dag: Ember.computed("stats", "model", {
get() { get() {
var percent = (this.get("epoch") * 8192) / 1024 / 1024 + 1; var percent = (this.get("epoch") * 8192) / 1024 / 1024 + 1;
@ -309,7 +342,6 @@ export default Ember.Controller.extend({
return percent; return percent;
}, },
}), }),
epoch: Ember.computed("model.stats", { epoch: Ember.computed("model.stats", {
get() { get() {
return parseInt(this.get("applicationController.height") / 30000); return parseInt(this.get("applicationController.height") / 30000);

4
www/app/helpers/format-threshold.js

@ -4,8 +4,8 @@ export function formatBalance(value) {
if (value < 0) { if (value < 0) {
value = 0; value = 0;
} }
value = value * 0.000000001; value = value * 0.000000001 ;
return value.toFixed(2); // Change toFixed(1) to toFixed(2) return value.toFixed(1);
} }
export default buildHelper(formatBalance); export default buildHelper(formatBalance);

7
www/app/helpers/wallet.js

@ -0,0 +1,7 @@
import Ember from 'ember';
export function formatTx(value) {
return value[0].substring(0, 26) + "..." + value[0].substring(26);
}
export default Ember.Helper.helper(formatTx);

2
www/app/helpers/with-metric-prefix.js

@ -13,7 +13,7 @@ export function withMetricPrefix(params/*, hash*/) {
n = n / 1000; n = n / 1000;
i++; i++;
} }
return n.toFixed(3) + ' ' + units[i - 1]; return n.toFixed(2) + ' ' + units[i - 1];
} }
export default Ember.Helper.helper(withMetricPrefix); export default Ember.Helper.helper(withMetricPrefix);

33
www/app/index.html

@ -1,20 +1,25 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="en"> <html lang="en">
<head>
<head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>ETC Mining Pool</title> <title>ETC Mining Pool</title>
<meta name="description" content="High profitability ETC mining pool"/> <meta name="description" content="High profitability ETC mining pool" />
<meta name="keywords" content="Ethereum, ethereum, Classic, classic, ETC, etc, pool, mining, cryptocurrency"/> <meta name="keywords" content="Ethereum, ethereum, Classic, classic, ETC, etc, pool, mining, cryptocurrency" />
<script src="https://cdn.polyfill.io/v3/polyfill.min.js?features=Intl.~locale.en"></script> <script src="https://cdn.polyfill.io/v1/polyfill.min.js?features=Intl.~locale.en"></script>
{{content-for "head"}} {{content-for "head"}}
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css">
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css"
integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
<link rel="stylesheet" href="{{rootURL}}assets/vendor.css"> <link rel="stylesheet" href="{{rootURL}}assets/vendor.css">
<link rel="stylesheet" href="{{rootURL}}assets/open-etc-pool.css"> <link rel="stylesheet" href="{{rootURL}}assets/open-etc-pool.css">
<link rel="shortcut icon" type="image/x-icon" href="{{rootURL}}favicon.png" /> <link rel="shortcut icon" type="image/x-icon" href="{{rootURL}}etc.svg" />
{{content-for "head-footer"}} {{content-for "head-footer"}}
</head> </head>
<body>
<body>
{{content-for "body"}} {{content-for "body"}}
<script src="{{rootURL}}assets/vendor.js"></script> <script src="{{rootURL}}assets/vendor.js"></script>
@ -27,14 +32,20 @@
<div class="text-center"> <div class="text-center">
<div class="row"> <div class="row">
<div class="col-md-12" style="text-align: center;"> <div class="col-md-12" style="text-align: center;">
<p class="text-muted" style="margin:20px 0">&copy; | <p class="text-muted" style="margin:20px 0">2024 &copy; |
Powered by <a href="https://github.com/yuriy0803/open-etc-pool-friends" target="_blank">open-etc-pool-friends</a> Powered by <i class="fa fa-home" aria-hidden="true"> <a href="https://open-etc-pool-friends"
target="_blank">open-etc-pool-friends</a></i> |
<i class='fas fa-wallet'> <a
href="https://etc.blockscout.com/address/0xFc9B271B1b03B60e5aD68CB89Bb1016b9eAc2baC"
target="_blank">Pool Wallet</a></i> |
<span class="bi bi-discord blue-color"> <a href="https://discord.com/invite/zdnuXm4uby"
target="_blank">Discord</a></span>
</p> </p>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
</footer> </footer>
</body> </body>
</html>
</html>

49
www/app/models/block.js

@ -1,47 +1,38 @@
import Ember from 'ember'; import EmberObject from '@ember/object';
import { computed } from '@ember/object';
// {
// "candidatesTotal": 0, var Block = EmberObject.extend({
// "hashrate": 0,
// "immatureTotal": 0, variance: computed('difficulty', 'shares', function() {
// "maturedTotal": 11, let percent = this.get('shares') / this.get('difficulty');
// "minersTotal": 0,
// "nodes": [{
// "difficulty": "2735271",
// "height": "63151",
// "lastBeat": "1471098611",
// "name": "jee-test-pool"
// }],
// "now": 1471098614036,
// "stats": {
// "lastBlockFound": 1471052210
// }
// }
var Block = Ember.Object.extend({
variance: Ember.computed('difficulty', 'shares', function() {
var percent = this.get('shares') / this.get('difficulty');
if (!percent) { if (!percent) {
return 0; return 0;
} }
return percent; return percent;
}), }),
isLucky: Ember.computed('variance', function() { isLucky: computed('variance', function() {
return this.get('variance') <= 1.0; return this.get('variance') <= 1.0;
}), }),
isHard: Ember.computed('variance', function() {
return this.get('variance') >= 1.2; isSolo: computed('miningType', function() {
return this.get('miningType') == "solo";
}), }),
isOk: Ember.computed('orphan', 'uncle', function() { isOk: computed('orphan', 'uncle', function() {
return !this.get('orphan'); return !this.get('orphan');
}), }),
formatReward: Ember.computed('reward', function() { lastBlockFound: Ember.computed('model', {
get() {
return parseInt(this.get('model.lastBlockFound')) || 0;
}
}),
formatReward: computed('reward', function() {
if (!this.get('orphan')) { if (!this.get('orphan')) {
var value = parseInt(this.get('reward')) * 0.000000000000000001; let value = parseInt(this.get('reward')) * 0.000000000000000001;
return value.toFixed(6); return value.toFixed(6);
} else { } else {
return 0; return 0;

1
www/app/router.js

@ -10,6 +10,7 @@ Router.map(function() {
this.route('payouts'); this.route('payouts');
this.route('rewards'); this.route('rewards');
this.route('settings'); this.route('settings');
this.route('mining');
}); });
this.route('not-found'); this.route('not-found');

317
www/app/styles/app.css

@ -4,13 +4,11 @@ html {
position: relative; position: relative;
min-height: 100%; min-height: 100%;
} }
body { body {
/* Margin bottom by footer height */ /* Margin bottom by footer height */
margin-bottom: 110px; margin-bottom: 110px;
/* background: url('/bg.png'); /* */ /* background: url('/bg.png'); /* */
} }
.footer { .footer {
position: absolute; position: absolute;
bottom: 0; bottom: 0;
@ -18,14 +16,13 @@ body {
/* Set the fixed height of the footer here */ /* Set the fixed height of the footer here */
background-color: #3a3b3c; background-color: #3a3b3c;
} }
.center { .center {
align-items: center; align-items: center;
display: flex; display: flex;
} }
/* Custom page CSS /* Custom page CSS
-------------------------------------------------- */ -------------------------------------------------- */
/* Not required for template or sticky footer method. */ /* Not required for template or sticky footer method. */
body { body {
@ -33,26 +30,21 @@ body {
padding-bottom: 5px; padding-bottom: 5px;
} }
body>.container { body > .container {
padding: 0px 15px 0; padding: 0px 15px 0;
background-color: #f3f2eb; background-color: #f3f2eb;
} }
.navbar {
display: flex;
}
.page-header { .page-header {
border-bottom-color: #d6d6d6; border-bottom-color: #d6d6d6;
} }
.container .text-muted { .container .text-muted {
margin: 20px 0; margin: 20px 0;
color: #9babb3; color: #9babb3;
text-shadow: 1px 1px 3px #202225; text-shadow: 1px 1px 3px #202225;
} }
.footer>.container { .footer > .container {
padding-right: 15px; padding-right: 15px;
padding-left: 15px; padding-left: 15px;
} }
@ -83,83 +75,58 @@ code {
border-color: #61BD81; border-color: #61BD81;
border-bottom-width: 2px; border-bottom-width: 2px;
} }
.navbar-default .navbar-brand { .navbar-default .navbar-brand {
color: #4A4A4A; color: #4A4A4A;
} }
.navbar-default .navbar-brand:hover, .navbar-default .navbar-brand:focus {
.navbar-default .navbar-brand:hover,
.navbar-default .navbar-brand:focus {
color: #4A4A4A; color: #4A4A4A;
} }
.navbar-default .navbar-text { .navbar-default .navbar-text {
color: #4A4A4A; color: #4A4A4A;
} }
.navbar-default .navbar-nav > li > a {
.navbar-default .navbar-nav>li>a {
color: #4A4A4A; color: #4A4A4A;
} }
.navbar-default .navbar-nav > li > a:hover, .navbar-default .navbar-nav > li > a:focus {
.navbar-default .navbar-nav>li>a:hover,
.navbar-default .navbar-nav>li>a:focus {
color: #61BD81; color: #61BD81;
} }
.navbar-default .navbar-nav > .active > a, .navbar-default .navbar-nav > .active > a:hover, .navbar-default .navbar-nav > .active > a:focus {
.navbar-default .navbar-nav>.active>a,
.navbar-default .navbar-nav>.active>a:hover,
.navbar-default .navbar-nav>.active>a:focus {
color: #ffffff; color: #ffffff;
background-color: #61BD81; background-color: #61BD81;
text-shadow: 1px 1px 2px #000; text-shadow: 1px 1px 2px #000;
} }
.navbar-default .navbar-nav > .open > a, .navbar-default .navbar-nav > .open > a:hover, .navbar-default .navbar-nav > .open > a:focus {
.navbar-default .navbar-nav>.open>a,
.navbar-default .navbar-nav>.open>a:hover,
.navbar-default .navbar-nav>.open>a:focus {
color: #ffffff; color: #ffffff;
background-color: #69102b; background-color: #69102b;
} }
.navbar-default .navbar-toggle { .navbar-default .navbar-toggle {
border-color: #2885da; border-color: #2885da;
} }
.navbar-default .navbar-toggle:hover, .navbar-default .navbar-toggle:focus {
.navbar-default .navbar-toggle:hover,
.navbar-default .navbar-toggle:focus {
background-color: #2885da; background-color: #2885da;
} }
.navbar-default .navbar-toggle .icon-bar { .navbar-default .navbar-toggle .icon-bar {
background-color: #4A4A4A; background-color: #4A4A4A;
} }
.navbar-default .navbar-collapse, .navbar-default .navbar-collapse,
.navbar-default .navbar-form { .navbar-default .navbar-form {
border-color: #4A4A4A; border-color: #4A4A4A;
} }
.navbar-default .navbar-link { .navbar-default .navbar-link {
color: #4A4A4A; color: #4A4A4A;
} }
.navbar-default .navbar-link:hover { .navbar-default .navbar-link:hover {
color: #ffffff; color: #ffffff;
} }
@media (max-width: 767px) { @media (max-width: 767px) {
.navbar-default .navbar-nav .open .dropdown-menu>li>a { .navbar-default .navbar-nav .open .dropdown-menu > li > a {
color: #4A4A4A; color: #4A4A4A;
} }
.navbar-default .navbar-nav .open .dropdown-menu > li > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {
.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover,
.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus {
color: #ffffff; color: #ffffff;
} }
.navbar-default .navbar-nav .open .dropdown-menu > .active > a, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover, .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {
.navbar-default .navbar-nav .open .dropdown-menu>.active>a,
.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover,
.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus {
color: #ffffff; color: #ffffff;
background-color: #3f9ff7; background-color: #3f9ff7;
} }
@ -184,18 +151,12 @@ span.logo-3 {
padding: 0 3px 0 3px; padding: 0 3px 0 3px;
} }
h1, h1, h2, h3, h4, h4, h6 {
h2,
h3,
h4,
h4,
h6 {
margin-top: 0px; margin-top: 0px;
} }
.container>h2, .container>h2, .container>h3 {
.container>h3 { margin-top:2.0rem;
margin-top: 2.0rem;
} }
.note code { .note code {
@ -239,11 +200,11 @@ span.logo-gold {
pointer-events: none; pointer-events: none;
} }
.etc-green>object { .etc-green > object{
float: left; float: left;
} }
.etc-green>strong { .etc-green > strong{
float: left; float: left;
} }
@ -253,8 +214,8 @@ span.logo-gold {
.etc-green { .etc-green {
transform: scale(0.4); transform: scale(0.4);
transform: translate(-200px, -50px); transform: translate(-200px, -50px);
} }
*/ */
.navbar-collapse { .navbar-collapse {
font-size: 14px; font-size: 14px;
@ -282,7 +243,6 @@ h4.note {
margin-top: 0; margin-top: 0;
font-weight: 300 !important; font-weight: 300 !important;
} }
/*---------------------------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------------------------*/
/*----------------------------Bootstrap side notes for calling out things----------------------------*/ /*----------------------------Bootstrap side notes for calling out things----------------------------*/
/*---------------------------------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------------------------------*/
@ -295,24 +255,19 @@ h4.note {
border-left-width: 5px; border-left-width: 5px;
border-radius: 3px; border-radius: 3px;
} }
.bs-callout h4 { .bs-callout h4 {
margin-top: 0; margin-top: 0;
margin-bottom: 5px; margin-bottom: 5px;
} }
.bs-callout p:last-child { .bs-callout p:last-child {
margin-bottom: 0; margin-bottom: 0;
} }
.bs-callout code { .bs-callout code {
border-radius: 3px; border-radius: 3px;
} }
.bs-callout+.bs-callout { .bs-callout+.bs-callout {
margin-top: -5px; margin-top: -5px;
} }
/* Themes for different contexts */ /* Themes for different contexts */
/* Default */ /* Default */
@ -320,7 +275,6 @@ h4.note {
background-color: #eeeeee; background-color: #eeeeee;
border-left-color: #777; border-left-color: #777;
} }
.bs-callout-default h4 { .bs-callout-default h4 {
color: #777; color: #777;
} }
@ -330,7 +284,6 @@ h4.note {
background-color: #e8effc; background-color: #e8effc;
border-left-color: #428bca; border-left-color: #428bca;
} }
.bs-callout-primary h4 { .bs-callout-primary h4 {
color: #428bca; color: #428bca;
} }
@ -340,7 +293,6 @@ h4.note {
background-color: #eafce8; background-color: #eafce8;
border-left-color: #5cb85c; border-left-color: #5cb85c;
} }
.bs-callout-success h4 { .bs-callout-success h4 {
color: #5cb85c; color: #5cb85c;
} }
@ -350,7 +302,6 @@ h4.note {
background-color: #fce8e8; background-color: #fce8e8;
border-left-color: #d9534f; border-left-color: #d9534f;
} }
.bs-callout-danger h4 { .bs-callout-danger h4 {
color: #d9534f; color: #d9534f;
} }
@ -360,7 +311,6 @@ h4.note {
background-color: #fcfbe8; background-color: #fcfbe8;
border-left-color: #f0ad4e; border-left-color: #f0ad4e;
} }
.bs-callout-warning h4 { .bs-callout-warning h4 {
color: #f0ad4e; color: #f0ad4e;
} }
@ -370,7 +320,6 @@ h4.note {
background-color: #E8F6FC; background-color: #E8F6FC;
border-left-color: #5bc0de; border-left-color: #5bc0de;
} }
.bs-callout-info h4 { .bs-callout-info h4 {
color: #5bc0de; color: #5bc0de;
} }
@ -384,37 +333,30 @@ h4.note {
margin-bottom: 10px; margin-bottom: 10px;
margin-top: 5px; margin-top: 5px;
} }
.stats:last-child{
.stats:last-child {
width: auto; width: auto;
} }
.stats > h3 > i {
.stats>h3>i {
width: 21px; width: 21px;
} }
.stats > div{
.stats>div {
padding: 5px 0; padding: 5px 0;
} }
.stats > div > .fa {
.stats>div>.fa {
width: 25px; width: 25px;
} }
.stats > div > span:first-of-type{
.stats>div>span:first-of-type {
font-weight: bold; font-weight: bold;
} }
/*--------------------------------------| Bootstrap overrides |--------------------------------------*/ /*--------------------------------------| Bootstrap overrides |--------------------------------------*/
.ul, .ul, .ul-link {
.ul-link {
font-weight: 200; font-weight: 200;
text-align: center; text-align: center;
} }
.ul-link:hover, .ul-link:hover, .ul-link:focus {
.ul-link:focus {
color: inherit; color: inherit;
text-decoration: none; text-decoration: none;
opacity: .70; opacity: .70;
@ -455,9 +397,8 @@ h4.note {
border-bottom: 2px solid #61BD81; border-bottom: 2px solid #61BD81;
} }
#alertError, #alertError,#alertSuccess{
#alertSuccess { display:none;
display: none;
} }
/*-----------------------------------------| Custom Classes |-----------------------------------------*/ /*-----------------------------------------| Custom Classes |-----------------------------------------*/
@ -496,31 +437,24 @@ h4.note {
.bg-black { .bg-black {
color: #f9f9f9 !important; color: #f9f9f9 !important;
} }
.bg-gray { .bg-gray {
background-color: #eaeaec !important; background-color: #eaeaec !important;
} }
.bg-blackd{
.bg-blackd {
background-color: #222222 !important; background-color: #222222 !important;
} }
.bg-red { .bg-red {
background-color: #f56954 !important; background-color: #f56954 !important;
} }
.bg-yellow { .bg-yellow {
background-color: #f39c12 !important; background-color: #f39c12 !important;
} }
.bg-cherry{
.bg-cherry {
background-color: #cd1231 !important; background-color: #cd1231 !important;
} }
.bg-aqua { .bg-aqua {
background-color: #00c0ef !important; background-color: #00c0ef !important;
} }
.bg-blue { .bg-blue {
background-color: #0073b7 !important; background-color: #0073b7 !important;
} }
@ -528,47 +462,36 @@ h4.note {
.bg-light-blue { .bg-light-blue {
background-color: #5fb4ef !important; background-color: #5fb4ef !important;
} }
.bg-wood{
.bg-wood {
background-color: #ab7d44 !important; background-color: #ab7d44 !important;
} }
.bg-green { .bg-green {
background-color: #00a65a !important; background-color: #00a65a !important;
} }
.bg-grass { .bg-grass {
background-color: #a1c436 !important; background-color: #a1c436 !important;
} }
.bg-navy { .bg-navy {
background-color: #001f3f !important; background-color: #001f3f !important;
} }
.bg-teal { .bg-teal {
background-color: #39cccc !important; background-color: #39cccc !important;
} }
.bg-olive { .bg-olive {
background-color: #7f8000 !important; background-color: #7f8000 !important;
} }
.bg-lime { .bg-lime {
background-color: #00e405 !important; background-color: #00e405 !important;
} }
.bg-orange { .bg-orange {
background-color: #ff851b !important; background-color: #ff851b !important;
} }
.bg-fuchsia { .bg-fuchsia {
background-color: #f012be !important; background-color: #f012be !important;
} }
.bg-purple { .bg-purple {
background-color: #932ab6 !important; background-color: #932ab6 !important;
} }
.bg-maroon { .bg-maroon {
background-color: #85144b !important; background-color: #85144b !important;
} }
@ -576,60 +499,46 @@ h4.note {
.bg-black { .bg-black {
background-color: #000 !important; background-color: #000 !important;
} }
/* Text colors */ /* Text colors */
.text-red { .text-red {
color: #f56954 !important; color: #f56954 !important;
} }
.text-yellow { .text-yellow {
color: #f39c12 !important; color: #f39c12 !important;
} }
.text-aqua { .text-aqua {
color: #00c0ef !important; color: #00c0ef !important;
} }
.text-blue { .text-blue {
color: #0073b7 !important; color: #0073b7 !important;
} }
.text-light-blue { .text-light-blue {
color: #3c8dbc !important; color: #3c8dbc !important;
} }
.text-green { .text-green {
color: #00a65a !important; color: #00a65a !important;
} }
.text-navy { .text-navy {
color: #001f3f !important; color: #001f3f !important;
} }
.text-teal { .text-teal {
color: #39cccc !important; color: #39cccc !important;
} }
.text-olive { .text-olive {
color: #7f8000 !important; color: #7f8000 !important;
} }
.text-lime { .text-lime {
color: #01ff70 !important; color: #01ff70 !important;
} }
.text-orange { .text-orange {
color: #ff851b !important; color: #ff851b !important;
} }
.text-fuchsia { .text-fuchsia {
color: #f012be !important; color: #f012be !important;
} }
.text-purple { .text-purple {
color: #932ab6 !important; color: #932ab6 !important;
} }
.text-maroon { .text-maroon {
color: #85144b !important; color: #85144b !important;
} }
@ -638,7 +547,8 @@ h4.note {
color: #ffffff !important; color: #ffffff !important;
} }
.text-light-yellow { .text-light-yellow
{
color: #fefc2e !important; color: #fefc2e !important;
} }
@ -646,22 +556,22 @@ h4.note {
.funkyradio div { .funkyradio div {
clear: both; clear: both;
overflow: hidden; overflow: hidden;
} }
.funkyradio label { .funkyradio label {
width: 100%; width: 100%;
border-radius: 3px; border-radius: 3px;
border: 1px solid #D1D3D4; border: 1px solid #D1D3D4;
font-weight: normal; font-weight: normal;
} }
.funkyradio input[type="radio"]:empty, .funkyradio input[type="radio"]:empty,
.funkyradio input[type="checkbox"]:empty { .funkyradio input[type="checkbox"]:empty {
display: none; display: none;
} }
.funkyradio input[type="radio"]:empty~label, .funkyradio input[type="radio"]:empty ~ label,
.funkyradio input[type="checkbox"]:empty~label { .funkyradio input[type="checkbox"]:empty ~ label {
position: relative; position: relative;
line-height: 2.5em; line-height: 2.5em;
text-indent: 3.25em; text-indent: 3.25em;
@ -671,10 +581,10 @@ h4.note {
-moz-user-select: none; -moz-user-select: none;
-ms-user-select: none; -ms-user-select: none;
user-select: none; user-select: none;
} }
.funkyradio input[type="radio"]:empty~label:before, .funkyradio input[type="radio"]:empty ~ label:before,
.funkyradio input[type="checkbox"]:empty~label:before { .funkyradio input[type="checkbox"]:empty ~ label:before {
position: absolute; position: absolute;
display: block; display: block;
top: 0; top: 0;
@ -684,83 +594,82 @@ h4.note {
width: 2.5em; width: 2.5em;
background: #D1D3D4; background: #D1D3D4;
border-radius: 3px 0 0 3px; border-radius: 3px 0 0 3px;
} }
.funkyradio input[type="radio"]:hover:not(:checked)~label, .funkyradio input[type="radio"]:hover:not(:checked) ~ label,
.funkyradio input[type="checkbox"]:hover:not(:checked)~label { .funkyradio input[type="checkbox"]:hover:not(:checked) ~ label {
color: #888; color: #888;
} }
.funkyradio input[type="radio"]:hover:not(:checked)~label:before, .funkyradio input[type="radio"]:hover:not(:checked) ~ label:before,
.funkyradio input[type="checkbox"]:hover:not(:checked)~label:before { .funkyradio input[type="checkbox"]:hover:not(:checked) ~ label:before {
content: '\2714'; content: '\2714';
text-indent: .9em; text-indent: .9em;
color: #C2C2C2; color: #C2C2C2;
} }
.funkyradio input[type="radio"]:checked~label, .funkyradio input[type="radio"]:checked ~ label,
.funkyradio input[type="checkbox"]:checked~label { .funkyradio input[type="checkbox"]:checked ~ label {
color: #777; color: #777;
} }
.funkyradio input[type="radio"]:checked~label:before, .funkyradio input[type="radio"]:checked ~ label:before,
.funkyradio input[type="checkbox"]:checked~label:before { .funkyradio input[type="checkbox"]:checked ~ label:before {
content: '\2714'; content: '\2714';
text-indent: .9em; text-indent: .9em;
color: #333; color: #333;
background-color: #ccc; background-color: #ccc;
} }
.funkyradio input[type="radio"]:focus~label:before, .funkyradio input[type="radio"]:focus ~ label:before,
.funkyradio input[type="checkbox"]:focus~label:before { .funkyradio input[type="checkbox"]:focus ~ label:before {
box-shadow: 0 0 0 3px #999; box-shadow: 0 0 0 3px #999;
} }
.funkyradio-default input[type="radio"]:checked~label:before, .funkyradio-default input[type="radio"]:checked ~ label:before,
.funkyradio-default input[type="checkbox"]:checked~label:before { .funkyradio-default input[type="checkbox"]:checked ~ label:before {
color: #333; color: #333;
background-color: #ccc; background-color: #ccc;
} }
.funkyradio-primary input[type="radio"]:checked~label:before, .funkyradio-primary input[type="radio"]:checked ~ label:before,
.funkyradio-primary input[type="checkbox"]:checked~label:before { .funkyradio-primary input[type="checkbox"]:checked ~ label:before {
color: #fff; color: #fff;
background-color: #337ab7; background-color: #337ab7;
} }
.funkyradio-success input[type="radio"]:checked~label:before, .funkyradio-success input[type="radio"]:checked ~ label:before,
.funkyradio-success input[type="checkbox"]:checked~label:before { .funkyradio-success input[type="checkbox"]:checked ~ label:before {
color: #fff; color: #fff;
background-color: #5cb85c; background-color: #5cb85c;
} }
.funkyradio-danger input[type="radio"]:checked~label:before, .funkyradio-danger input[type="radio"]:checked ~ label:before,
.funkyradio-danger input[type="checkbox"]:checked~label:before { .funkyradio-danger input[type="checkbox"]:checked ~ label:before {
color: #fff; color: #fff;
background-color: #d9534f; background-color: #d9534f;
} }
.funkyradio-warning input[type="radio"]:checked~label:before, .funkyradio-warning input[type="radio"]:checked ~ label:before,
.funkyradio-warning input[type="checkbox"]:checked~label:before { .funkyradio-warning input[type="checkbox"]:checked ~ label:before {
color: #fff; color: #fff;
background-color: #f0ad4e; background-color: #f0ad4e;
} }
.funkyradio-info input[type="radio"]:checked~label:before, .funkyradio-info input[type="radio"]:checked ~ label:before,
.funkyradio-info input[type="checkbox"]:checked~label:before { .funkyradio-info input[type="checkbox"]:checked ~ label:before {
color: #fff; color: #fff;
background-color: #5bc0de; background-color: #5bc0de;
} }
.panel-footer {
.panel-footer {
padding: 10px 15px; padding: 10px 15px;
background-color: #f5f5f5; background-color: #f5f5f5;
border-top: 1px solid #ddd; border-top: 1px solid #ddd;
border-bottom-right-radius: 0px; border-bottom-right-radius: 0px;
border-bottom-left-radius: 0px; border-bottom-left-radius: 0px;
} }
.loader { .loader {
color: #025886; color: #025886;
font-size: 20px; font-size: 20px;
margin: auto; margin: auto;
@ -773,116 +682,64 @@ h4.note {
-webkit-transform: translateZ(0); -webkit-transform: translateZ(0);
-ms-transform: translateZ(0); -ms-transform: translateZ(0);
transform: translateZ(0); transform: translateZ(0);
top: 0; top:0;
bottom: 0; bottom: 0;
left: 0; left: 0;
right: 0; right: 0;
position: absolute; position: absolute;
} }
@-webkit-keyframes load4 {
@-webkit-keyframes load4 {
0%, 0%,
100% { 100% {
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
} }
12.5% { 12.5% {
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
} }
25% { 25% {
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
} }
37.5% { 37.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
} }
50% { 50% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
} }
62.5% { 62.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
} }
75% { 75% {
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
} }
87.5% { 87.5% {
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
} }
} }
@keyframes load4 {
@keyframes load4 {
0%, 0%,
100% { 100% {
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0; box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
} }
12.5% { 12.5% {
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
} }
25% { 25% {
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
} }
37.5% { 37.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
} }
50% { 50% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
} }
62.5% { 62.5% {
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em; box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
} }
75% { 75% {
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0; box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
} }
87.5% { 87.5% {
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em; box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
} }
} }
.fa-rotate-90 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
-webkit-transform: rotate(90deg);
-ms-transform: rotate(90deg);
transform: rotate(90deg)
}
.fa-rotate-180 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
-webkit-transform: rotate(180deg);
-ms-transform: rotate(180deg);
transform: rotate(180deg)
}
.fa-rotate-270 {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
-webkit-transform: rotate(270deg);
-ms-transform: rotate(270deg);
transform: rotate(270deg)
}
.fa-flip-horizontal {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
-webkit-transform: scale(-1, 1);
-ms-transform: scale(-1, 1);
transform: scale(-1, 1)
}
.fa-flip-vertical {
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
-webkit-transform: scale(1, -1);
-ms-transform: scale(1, -1);
transform: scale(1, -1)
}

5
www/app/templates/about.hbs

@ -9,12 +9,7 @@
<h3>Details</h3> <h3>Details</h3>
<p> <p>
<ul> <ul>
<li>It's a solo mining pool.</li>
<li>Written in Go it's a rocket highly concurrent and low RAM consuming piece of code</li> <li>Written in Go it's a rocket highly concurrent and low RAM consuming piece of code</li>
<li>It's a stratum over a coin node with many options.</li>
<li>Each miner works independently of the others.</li>
<li>The block reward goes to only the miner who found it.</li>
<li>Block search time depends on your hashrate and luck.</li>
<li>High performance proxy</li> <li>High performance proxy</li>
<li>Payouts and block unlocking module</li> <li>Payouts and block unlocking module</li>
<li>Designed for 100% distributed setup</li> <li>Designed for 100% distributed setup</li>

55
www/app/templates/account.hbs

@ -9,19 +9,22 @@
</div> </div>
<div style="display: block;"> <div style="display: block;">
<i class="fa fa-bank"></i> Pending Balance: <span>{{format-balance model.stats.balance}}</span><br> <i class="fa fa-bank"></i> Pending Balance: <span>{{format-balance model.stats.balance}}</span><br>
<i class="fa fa-bank"></i> Your Threshold: <span>{{format-threshold model.threshold}} <i class="fa fa-bank"></i> Your Threshold: <span>{{format-threshold model.threshold}}</span><br>
{{config.Unit}}</span><br>
<small>Credited coins awaiting payout.</small> <small>Credited coins awaiting payout.</small>
</div> </div>
{{#if model.stats.payouttreshold}}
<div style="display: block;">
<i class="fa fa-bank"></i> Payout Treshold: <span>{{format-balance model.stats.payouttreshold}}</span><br>
</div>
{{/if}}
{{#if model.stats.pending}} {{#if model.stats.pending}}
<div style="display: block;"> <div style="display: block;">
<i class="fa fa-clock-o"></i> Current Payment: <span>{{format-balance model.stats.pending}}</span><br> <i class="fa fa-clock-o"></i> Current Payment: <span>{{format-balance model.stats.pending}}</span><br>
</div> </div>
{{/if}} {{/if}}
<div style="display: block;"><i class="fa fa-money"></i> Total Paid: <span>{{format-balance <div style="display: block;"><i class="fa fa-money"></i> Total Paid: <span>{{format-balance model.stats.paid}}</span></div>
model.stats.paid}}</span> / <span>{{format-balance earnTotalPaid}} $</span></div> <div style="display: block;"><i class="fa fa-money"></i> Last 24h Reward: <span>{{format-balance model.24hreward}}</span></div>
<div style="display: block;"><i class="fa fa-money"></i> Last 24h Reward: <span>{{format-balance <div style="display: block;"><i class="fa fa-calculator"></i>Earnings per day (24h avg):<span>{{format-number earnPerDay}}</span></div>
model.24hreward}}</span></div>
</div> </div>
<div class="col-md-4 stats"> <div class="col-md-4 stats">
{{#if model.stats.lastShare}} {{#if model.stats.lastShare}}
@ -29,34 +32,24 @@
Last Share Submitted: <span>{{format-relative (seconds-to-ms (string-to-int model.stats.lastShare))}}</span> Last Share Submitted: <span>{{format-relative (seconds-to-ms (string-to-int model.stats.lastShare))}}</span>
</div> </div>
{{/if}} {{/if}}
<div style="display: block;"><i class="fa fa-gears"></i> Workers Online: <span>{{format-number <div style="display: block;"><i class="fa fa-gears"></i> Workers Online: <span>{{format-number model.workersOnline}}</span></div>
model.workersOnline}}</span></div> <div style="display: block;"><i class="fa fa-tachometer"></i> Hashrate (1 Hour): <span>{{format-hashrate model.currentHashrate}}</span></div>
<div style="display: block;"><i class="fa fa-tachometer"></i> Hashrate (30m): <span>{{format-hashrate <div style="display: block;"><i class="fa fa-tachometer"></i> Hashrate (6 Hour): <span>{{format-hashrate model.hashrate}}</span></div>
model.currentHashrate}}</span></div> <div style="display: block;"><i class="fa fa-gears"></i> Shares found: <span>{{format-hashrate model.stats.lastShareDiff}}</span></div>
<div style="display: block;"><i class="fa fa-tachometer"></i> Hashrate (3h): <span>{{format-hashrate <div style="display: block;"><i class="fa fa-gears"></i> Mining Type:<span>{{#if model.miningTypeSolo}}<span>SOLO</span>{{else}}<span> PPLNS</span>{{/if}}</span></div>
model.hashrate}}</span></div>
<div style="display: block;"><i class="fa fa-gears"></i> Last Share Diff: <span>{{format-hashrate
model.stats.lastShareDiff}}</span></div>
<div style="display: block;">
<i class="fa fa-gears"></i> Your Round Share: <span>{{format-number roundPercent style='percent'
maximumFractionDigits='2'}}</span><br />
</div>
</div> </div>
<div class="col-md-4 stats"> <div class="col-md-4 stats">
<div style="display: block;"><i class="fa fa-tachometer"></i> Blocks Found: <span>{{format-number <div style="display: block;"><i class="fa fa-tachometer"></i> Blocks Found: <span>{{format-number model.stats.blocksFound fallback='0'}}</span></div>
model.stats.blocksFound fallback='0'}}</span></div>
<div style="display: block;"><i class="fa fa-paper-plane-o"></i> Total Payments: <span>{{format-number
model.paymentsTotal}}</span></div>
<div style="display: block;"><i class="fa fa-gears"></i> Personal Luck: <span>{{format-number PersonalLuck
style='percent'}}</span></div>
<div style="display: block;"><i class="fa fa-calculator"></i> Est. Earnings /day (3h avg): <span>{{format-number
earnPerDayToken maximumFractionDigits='1'}}</span> / <span>{{format-number earnPerDayUsd
maximumFractionDigits='1'}} $</span></div>
<div style="display: block;"> <div style="display: block;">
<i class="fa fa-clock-o"></i> <i class="fa fa-clock-o"></i>
Epoch Switch: <span>{{format-relative applicationController.nextEpoch units="hour"}}</span> Epoch Switch: <span>{{format-relative applicationController.nextEpoch units="hour"}}</span>
</div> </div>
<!--<div style="display: block;"><i class="fa fa-thermometer fa-fw"></i> My Shares in the last 'N' <span>{{roundSharesN}}</span></div>-->
<div style="display: block;"><i class="fa fa-gears"></i> Personal Luck: <span>{{format-number PersonalLuck style='percent'}}</span></div>
<div style="display: block;">
<i class="fa fa-gears"></i>PPLNS Your Round Share: <span>{{format-number roundPercent style='percent' maximumFractionDigits='0'}}</span><br/>
<small>Percent of your contribution to current round.</small>
</div>
</div> </div>
</div> </div>
</div> </div>
@ -65,8 +58,7 @@
<div class="container"> <div class="container">
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
{{#active-li currentWhen='account.index' role='presentation'}} {{#active-li currentWhen='account.index' role='presentation'}}
{{#link-to 'account.index'}}Workers <span class="label label-success">{{model.workersOnline}}</span> / <span {{#link-to 'account.index'}}Workers <span class="label label-success">{{model.workersOnline}}</span> / <span class="label label-danger">{{model.workersOffline}}</span>{{/link-to}}
class="label label-danger">{{model.workersOffline}}</span>{{/link-to}}
{{/active-li}} {{/active-li}}
{{#active-li currentWhen='account.rewards' role='presentation'}} {{#active-li currentWhen='account.rewards' role='presentation'}}
{{#link-to 'account.rewards'}}Rewards{{/link-to}} {{#link-to 'account.rewards'}}Rewards{{/link-to}}
@ -76,6 +68,9 @@
{{/active-li}} {{/active-li}}
{{#active-li currentWhen='account.settings' role='presentation'}} {{#active-li currentWhen='account.settings' role='presentation'}}
{{#link-to 'account.settings'}}Settings{{/link-to}} {{#link-to 'account.settings'}}Settings{{/link-to}}
{{/active-li}}
{{#active-li currentWhen='account.mining' role='presentation'}}
{{#link-to 'account.mining'}}PPLNS/SOLO{{/link-to}}
{{/active-li}} {{/active-li}}
</ul> </ul>
</div> </div>

57
www/app/templates/account/index.hbs

@ -1,36 +1,6 @@
<div class="container"> <div class="container">
{{high-charts mode=chartMode chartOptions=chartOptions content=chartData}} {{high-charts mode=chartMode chartOptions=chartOptions content=chartData}}
{{high-charts mode=chartMode chartOptions=shareChart content=chartData}} {{high-charts mode=chartMode chartOptions=shareChart content=chartData}}
<table class="table table-condensed table-striped">
<thead>
<tr class="active">
<th>Time</th>
<th>Amount</th>
</tr>
</thead>
<tbody>
<tr>
<td><span>Last 60 minutes</span></td>
<td><span>{{format-number earnPerHour maximumFractionDigits='8'}}</span></td>
</tr>
<tr>
<td><span>Last 12 hours</span></td>
<td><span>{{format-number earnPerHour12 maximumFractionDigits='8'}}</span></td>
</tr>
<tr>
<td><span>Last 24 hours</span></td>
<td>{{format-number earnPerDay maximumFractionDigits='8'}}</td>
</tr>
<tr>
<td><span>Last 7 days</span></td>
<td>{{format-number earnPerWeek maximumFractionDigits='8'}}</td>
</tr>
<tr>
<td><span>Last 30 days</span></td>
<td>{{format-number earnPerMonth maximumFractionDigits='8'}}</td>
</tr>
</tbody>
</table>
{{#if model.workers}} {{#if model.workers}}
<h4>Your Workers</h4> <h4>Your Workers</h4>
<div class="table-responsive"> <div class="table-responsive">
@ -38,8 +8,7 @@
<thead> <thead>
<tr> <tr>
<th>ID</th> <th>ID</th>
<th>Hashrate (rough, short average)</th> <th>Current Hashrate / Average Hashrate</th>
<th>Hashrate (accurate, long average)</th>
<th>Hostname</th> <th>Hostname</th>
<th>Port Difficulty</th> <th>Port Difficulty</th>
<th>Blocks</th> <th>Blocks</th>
@ -49,19 +18,13 @@
</thead> </thead>
<tbody> <tbody>
{{#each-in model.workers as |k v|}} {{#each-in model.workers as |k v|}}
<tr class="{{if v.offline " warning" "success" }}"> <tr class="{{if v.offline "warning" "success"}}">
<td>{{k}}</td> <td>{{k}}</td>
<td>{{format-hashrate v.hr}} {{#if v.w_stat_s}}<i class="fa fa-arrow-up" style="color:rgb(0, 9, 128)" <td>{{format-hashrate v.hr}} {{#if v.w_stat_s}}<i class="fa fa-arrow-up" style="color:rgb(0, 9, 128)" aria-hidden="true"></i>{{else}}<i class="fa fa-arrow-down" style="color:red" aria-hidden="true"></i>{{/if}} / {{format-hashrate v.hr2}} {{#if v.w_stat}}<i class="fa fa-arrow-up" style="color:rgb(0, 9, 128)" aria-hidden="true"></i>{{else}}<i class="fa fa-arrow-down" style="color:red" aria-hidden="true"></i>{{/if}}</td>
aria-hidden="true"></i>{{else}}<i class="fa fa-arrow-down" style="color:red"
aria-hidden="true"></i>{{/if}}</td>
<td>{{format-hashrate v.hr2}} {{#if v.w_stat}}<i class="fa fa-arrow-up" style="color:rgb(0, 9, 128)"
aria-hidden="true"></i>{{else}}<i class="fa fa-arrow-down" style="color:red"
aria-hidden="true"></i>{{/if}}</td>
<td>{{v.hostname}}</td> <td>{{v.hostname}}</td>
<td><span class="label label-success">{{format-hashrate v.portDiff}}</span></td> <td><span class="label label-success">{{format-hashrate v.portDiff}}</span></td>
<td>{{v.blocks}}</td> <td>{{v.blocks}}</td>
<td><span class="text-green">{{v.valid}}</span> ({{v.v_per}}%) / <span class="text-yellow">{{v.stale}}</span> <td><span class="text-green">{{v.valid}}</span> ({{v.v_per}}%) / <span class="text-yellow">{{v.stale}}</span> ({{v.s_per}}%) / <span class="text-red">{{v.invalid}}</span> ({{v.i_per}}%)</td>
({{v.s_per}}%) / <span class="text-red">{{v.invalid}}</span> ({{v.i_per}}%)</td>
<td>{{format-relative (seconds-to-ms v.lastBeat)}}</td> <td>{{format-relative (seconds-to-ms v.lastBeat)}}</td>
</tr> </tr>
{{/each-in}} {{/each-in}}
@ -73,14 +36,12 @@
{{/if}} {{/if}}
<div class="alert alert-info" role="alert"> <div class="alert alert-info" role="alert">
<span class="sr-only">Notice:</span> <span class="sr-only">Notice:</span>
Your average hashrate will be smoothly adjusted until you have shares to fullfill estimation window.<br /> Your average hashrate will be smoothly adjusted until you have shares to fullfill estimation window.<br/>
There are two windows, long and short, first is equal to about 30 minutes and long window is usually equal to 3 There are two windows, long and short, first is equal to about 1 hours and long window is usually equal to 6 hours.<br/>
hours.<br />
Dead (sick) workers will be highlighted in a table of workers if they didn't submit a share for 1/2 of short window, Dead (sick) workers will be highlighted in a table of workers if they didn't submit a share for 1/2 of short window,
so you can perform maintenance of your rigs. so you can perform maintenance of your rigs.
</div> </div>
<div class="alert alert-info" role="alert"> <div class="alert alert-info" role="alert">
<strong>Your bulk stats JSON API URL:</strong> <a <strong>Your bulk stats JSON API URL:</strong> <a href="/api/accounts/{{model.login}}">/api/accounts/{{model.login}}</a>
href="/api/accounts/{{model.login}}">/api/accounts/{{model.login}}</a>
</div> </div>
</div> </div>

68
www/app/templates/account/mining.hbs

@ -0,0 +1,68 @@
<div class="container">
<div id="mining" style="margin-top:50px;" class="col-md-6 col-md-offset-3 col-sm-8 col-sm-offset-2">
<div class="row">
<div id="alertSuccess" class="alert alert-success" role="alert">
Success
</div>
<div id="alertError" class="alert alert-danger" role="alert">
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">&times;</span></button>
Error
</div>
</div>
<form action="/api/mining" method="post">
<input type="hidden" id="login" name="login" value="{{model.login}}">
<div class="form-group">
<div class="funkyradio">
<div class="funkyradio-success">
<input type="radio" name="radio" id="radio2" value="pplns" checked="{{if model.miningTypePplns "true"}}" />
<label for="radio2">PPLNS Mining</label>
</div>
</div>
<div class="funkyradio">
<div class="funkyradio-danger">
<input type="radio" name="radio" id="radio1" value="solo" checked="{{if model.miningTypeSolo "true"}}" />
<label for="radio1">SOLO Mining</label>
</div>
</div>
</div>
<div class="form-group">
<label for="ip_address">Active Worker IP address </label>
<input class="form-control" name="ip_address" id="ip_address" placeholder="192.168.0.1" type="text">
<small id="ip_address" class="form-text text-dark">
Please complete your worker`s IP address in order to validate and save your settings.
</small>
</div>
<br>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
</div>
</div>
<script>
$(document).ready(function () {
var $form = $('form');
$form.submit(function () {
$.post($(this).attr('action'), $(this).serialize(), function (response) {
if (response.result == "success") {
$('#alertSuccess').html(response.result);
$("#alertSuccess").fadeIn() //or fadeIn
setTimeout(function() {
$("#alertSuccess").fadeOut(); //or fadeOut
}, 5000);
} else {
$('#alertError').html(response.result);
$("#alertError").fadeIn() //or fadeIn
setTimeout(function() {
$("#alertError").fadeOut(); //or fadeOut
}, 5000);
}
}, 'json');
return false;
});
});
</script>

2
www/app/templates/account/payouts.hbs

@ -16,7 +16,7 @@
<tr> <tr>
<td>{{format-date-locale tx.timestamp}}</td> <td>{{format-date-locale tx.timestamp}}</td>
<td> <td>
<a href="https://expedition.dev/tx/{{tx.tx}}" class="hash" rel="nofollow" target="_blank">{{tx.tx}}</a> <a href="https://etc.blockscout.com/tx/{{tx.tx}}" class="hash" rel="nofollow" target="_blank">{{tx.tx}}</a>
</td> </td>
<td>{{format-balance tx.amount}}</td> <td>{{format-balance tx.amount}}</td>
</tr> </tr>

21
www/app/templates/account/rewards.hbs

@ -7,8 +7,7 @@
<th>Time</th> <th>Time</th>
<th>Blocks</th> <th>Blocks</th>
<th>Amount</th> <th>Amount</th>
<th>Luck</th> <th>Personal Luck</th>
<th>USD</th>
</tr> </tr>
</thead> </thead>
@ -18,16 +17,10 @@
<td>{{sumreward.name}}</td> <td>{{sumreward.name}}</td>
<td>{{sumreward.blocks}}</td> <td>{{sumreward.blocks}}</td>
<td>{{format-balance sumreward.reward}}</td> <td>{{format-balance sumreward.reward}}</td>
<td>{{format-number sumreward.personalLuck style='percent'}}</td> <td>
<td><em> {{format-number sumreward.averageLuck style='percent'}}
</td>
{{#if (eq config.Currency 'USD') }}
{{format-ethusd sumreward.reward model.exchangedata.price_usd}}
{{else}}
{{format-ethinr sumreward.reward model.exchangedata.price_inr}}
{{/if}}
</em></td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>
@ -39,7 +32,7 @@
<th>Block Height</th> <th>Block Height</th>
<th>Time Found</th> <th>Time Found</th>
<th>Reward</th> <th>Reward</th>
<th>Your Round Share</th> <th>Round Share</th>
<th>Personal Luck</th> <th>Personal Luck</th>
</tr> </tr>
@ -57,7 +50,9 @@
{{/if}} {{/if}}
</td> </td>
<td>{{format-number tx.percent style='percent' maximumFractionDigits='2'}}</td> <td>{{format-number tx.percent style='percent' maximumFractionDigits='2'}}</td>
<td>{{format-number tx.personalLuck style='percent' maximumFractionDigits='2'}}</td> <td>
{{format-number tx.personalLuck style='percent'}}
</td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>

5
www/app/templates/account/settings.hbs

@ -11,6 +11,7 @@
</div> </div>
</div> </div>
<form action="/api/settings" method="post"> <form action="/api/settings" method="post">
<div class="form-group"> <div class="form-group">
@ -20,7 +21,6 @@
placeholder="Enter email"> placeholder="Enter email">
<small id="emailHelp" class="form-text text-dark">We'll never share your email with anyone else.</small> <small id="emailHelp" class="form-text text-dark">We'll never share your email with anyone else.</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="threshold">Payment Threshold</label> <label for="threshold">Payment Threshold</label>
<input class="form-control" id="threshold" name="threshold" placeholder="min 0.5 - max 10000" min="0.5" <input class="form-control" id="threshold" name="threshold" placeholder="min 0.5 - max 10000" min="0.5"
@ -28,7 +28,6 @@
<small id="thresholdHelp" class="form-text text-dark">Payment threshold in {{config.Unit}} (Min: 0.5, Max: <small id="thresholdHelp" class="form-text text-dark">Payment threshold in {{config.Unit}} (Min: 0.5, Max:
10000)</small> 10000)</small>
</div> </div>
<div class="form-group"> <div class="form-group">
<label for="ip_address">Active Worker IP address</label> <label for="ip_address">Active Worker IP address</label>
<input class="form-control" name="ip_address" id="ip_address" placeholder="192.168.0.1" type="text"> <input class="form-control" name="ip_address" id="ip_address" placeholder="192.168.0.1" type="text">
@ -36,7 +35,6 @@
Please complete your worker`s IP address in order to validate and save your settings. Please complete your worker`s IP address in order to validate and save your settings.
</small> </small>
</div> </div>
<div class="form-group form-check"> <div class="form-group form-check">
<label class="form-check-label" for="worker_offline"> <label class="form-check-label" for="worker_offline">
<input type="checkbox" name="alertCheck" class="form-check-input" id="alertCheck" checked> Send a mail if one <input type="checkbox" name="alertCheck" class="form-check-input" id="alertCheck" checked> Send a mail if one
@ -44,7 +42,6 @@
my workers goes offline my workers goes offline
</label> </label>
</div> </div>
<button type="submit" class="btn btn-primary">Submit</button> <button type="submit" class="btn btn-primary">Submit</button>
</form> </form>

2
www/app/templates/application.hbs

@ -63,6 +63,7 @@
<script> <script>
$(document).mouseup(function (e) { $(document).mouseup(function (e) {
var container = $(".collapse"); var container = $(".collapse");
if (!container.is(e.target) // if the target of the click isn't the container... if (!container.is(e.target) // if the target of the click isn't the container...
&& container.has(e.target).length === 0) // ... nor a descendant of the container && container.has(e.target).length === 0) // ... nor a descendant of the container
{ {
@ -71,6 +72,7 @@
$("#navBtn").attr('aria-expanded', false); $("#navBtn").attr('aria-expanded', false);
$("#navbarSupportedContent").removeClass("show"); $("#navbarSupportedContent").removeClass("show");
} }
}); });
</script> </script>
</div> </div>

9
www/app/templates/blocks.hbs

@ -16,16 +16,13 @@
<ul class="nav nav-tabs"> <ul class="nav nav-tabs">
{{#active-li currentWhen='blocks.index' role='presentation'}} {{#active-li currentWhen='blocks.index' role='presentation'}}
{{#link-to 'blocks.index'}}Blocks <span class="badge alert-success">{{format-number {{#link-to 'blocks.index'}}Blocks <span class="badge alert-success">{{format-number model.maturedTotal}}</span>{{/link-to}}
model.maturedTotal}}</span>{{/link-to}}
{{/active-li}} {{/active-li}}
{{#active-li currentWhen='blocks.immature' role='presentation'}} {{#active-li currentWhen='blocks.immature' role='presentation'}}
{{#link-to 'blocks.immature'}}Immature <span class="badge alert-success">{{format-number {{#link-to 'blocks.immature'}}Immature <span class="badge alert-success">{{format-number model.immatureTotal}}</span>{{/link-to}}
model.immatureTotal}}</span>{{/link-to}}
{{/active-li}} {{/active-li}}
{{#active-li currentWhen='blocks.pending' role='presentation'}} {{#active-li currentWhen='blocks.pending' role='presentation'}}
{{#link-to 'blocks.pending'}}New Blocks <span class="badge alert-info">{{format-number {{#link-to 'blocks.pending'}}New Blocks <span class="badge alert-info">{{format-number model.candidatesTotal}}</span>{{/link-to}}
model.candidatesTotal}}</span>{{/link-to}}
{{/active-li}} {{/active-li}}
</ul> </ul>
{{outlet}} {{outlet}}

30
www/app/templates/blocks/block.hbs

@ -1,10 +1,10 @@
<tr> <tr>
<td> <td>
{{#if block.uncle}} {{#if block.uncle}}
<a href="{{t " links.blockExplorerLink_uncle"}}{{block.uncleHeight}}" rel="nofollow" target="_blank">{{format-number <a href="https://etc.blockscout.com/block/{{block.uncleHeight}}" rel="nofollow" target="_blank">{{format-number
block.height}}</a> block.height}}</a>
{{else}} {{else}}
<a href="{{t " links.blockExplorerLink_block"}}{{block.height}}" rel="nofollow" target="_blank">{{format-number <a href="https://etc.blockscout.com/block/{{block.height}}" rel="nofollow" target="_blank">{{format-number
block.height}}</a> block.height}}</a>
{{/if}} {{/if}}
</td> </td>
@ -12,33 +12,26 @@
{{#if block.uncle}} {{#if block.uncle}}
<td>{{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}}</td> <td>{{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}}</td>
{{else if block.orphan}} {{else if block.orphan}}
<span class="label label-danger">{{t "block.orphan"}}</span> <span class="label label-danger">Orphan</span>
{{else}} {{else}}
<td>{{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}}</td> <td>{{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}}</td>
{{/if}} {{/if}}
</td> </td>
<td>{{format-date-locale block.timestamp}}</td>
<td> <td>
{{#if block.uncle}} {{#if block.isSolo}}
<a href="{{t " links.blockExplorerLink_uncle"}}{{block.hash}}" class="hash" rel="nofollow" <span class="label label-danger">{{block.miningType}}</span>
target="_blank">{{block.hash}}</a>
{{else if block.orphan}}
<span class="label label-danger">{{t "block.orphan"}}</span>
{{else}} {{else}}
<a href="{{t " links.blockExplorerLink_block"}}{{block.hash}}" class="hash" rel="nofollow" <span class="label label-warning">{{block.miningType}}</span>
target="_blank">{{block.hash}}</a>
{{/if}} {{/if}}
</td> </td>
<td>{{format-date-locale block.timestamp}}</td>
<td> <td>
{{#if block.isLucky}} {{#if block.isLucky}}
<span class="label label-success">{{format-number block.variance style='percent'}}</span> <span class="label label-success">{{format-number block.variance style='percent'}}</span>
{{else}} {{else}}
{{#if block.isHard}}
<span class="label label-danger">{{format-number block.variance style='percent'}}</span>
{{else}}
<span class="label label-info">{{format-number block.variance style='percent'}}</span> <span class="label label-info">{{format-number block.variance style='percent'}}</span>
{{/if}} {{/if}}
{{/if}}
</td> </td>
<td> <td>
{{#if block.uncle}} {{#if block.uncle}}
@ -47,6 +40,13 @@
<span class="label label-primary">{{block.formatReward}}</span> <span class="label label-primary">{{block.formatReward}}</span>
{{/if}} {{/if}}
</td> </td>
<td>
{{#if block.uncle}}
<span class="label label-default">Uncle</span>
{{else if block.isOk}}
<span class="label label-primary">Block</span>
{{/if}}
</td>
<td>{{format-hashrate block.shareDiff}}</td> <td>{{format-hashrate block.shareDiff}}</td>
<td>{{block.worker}}</td> <td>{{block.worker}}</td>
</tr> </tr>

25
www/app/templates/blocks/immature.hbs

@ -1,17 +1,18 @@
{{#if model.immature}} {{#if model.immature}}
<h3>{{t "block.immature_blocks"}}</h3> <h4>Immature Blocks</h4>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-condensed table-striped"> <table class="table table-condensed table-striped">
<thead> <thead>
<tr> <tr>
<th>{{t "block.height"}}</th> <th>Height</th>
<th>{{t "block.login"}}</th> <th>Login</th>
<th>{{t "block.hash"}}</th> <th>Time Found</th>
<th>{{t "block.time_found"}}</th> <th>Type</th>
<th>{{t "block.variance"}}</th> <th>Variance</th>
<th>{{t "block.reward"}}</th> <th>Reward</th>
<th>{{t "block.shares"}}</th> <th>Type</th>
<th>{{t "block.worker"}}</th> <th>Shares/Diff</th>
<th>Worker ID</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -19,8 +20,8 @@
{{partial "blocks/block"}} {{partial "blocks/block"}}
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
</div> </div>
{{else}} {{else}}
<h3>{{t "block.no_immature_blocks_yet"}}</h3> <h3>No immature blocks yet</h3>
{{/if}} {{/if}}

25
www/app/templates/blocks/index.hbs

@ -1,17 +1,18 @@
{{#if model.matured}} {{#if model.matured}}
<h3>{{t "block.matured"}}</h3> <h4>Matured Blocks</h4>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-condensed table-striped"> <table class="table table-condensed table-striped">
<thead> <thead>
<tr> <tr>
<th>{{t "block.height"}}</th> <th>Height</th>
<th>{{t "block.login"}}</th> <th>Login</th>
<th>{{t "block.hash"}}</th> <th>Time Found</th>
<th>{{t "block.time_found"}}</th> <th>Current Type</th>
<th>{{t "block.variance"}}</th> <th>Variance</th>
<th>{{t "block.reward"}}</th> <th>Reward</th>
<th>{{t "block.shares"}}</th> <th>Type</th>
<th>{{t "block.worker"}}</th> <th>Shares/Diff</th>
<th>Worker ID</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -19,8 +20,8 @@
{{partial "blocks/block"}} {{partial "blocks/block"}}
{{/each}} {{/each}}
</tbody> </tbody>
</table> </table>
</div> </div>
{{else}} {{else}}
<h3>{{t "block.no_matured_blocks_yet"}}</h3> <h3>No matured blocks yet</h3>
{{/if}} {{/if}}

24
www/app/templates/blocks/pending.hbs

@ -4,21 +4,29 @@
<table class="table table-condensed table-striped"> <table class="table table-condensed table-striped">
<thead> <thead>
<tr> <tr>
<th>{{t "block.height"}}</th> <th>Height</th>
<th>{{t "block.login"}}</th> <th>Login</th>
<th>{{t "block.time_found"}}</th> <th>Time Found</th>
<th>{{t "block.variance"}}</th> <th>Type</th>
<th>{{t "block.shares"}}</th> <th>Variance</th>
<th>Shares/Diff</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
{{#each model.candidates as |block|}} {{#each model.candidates as |block|}}
<tr> <tr>
<td><a href="{{t " links.blockExplorerLink_block"}}{{block.height}}" rel="nofollow" <td><a href="https://etc.blockscout.com/block/{{block.height}}" rel="nofollow" target="_blank">{{format-number
target="_blank">{{format-number
block.height}}</a></td> block.height}}</a></td>
<td>{{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}}</td> <td>{{#link-to 'account' block.finder class='hash'}}{{block.finder}}{{/link-to}}</td>
<td>{{format-date-locale block.timestamp}}</td> <td>{{format-date-locale block.timestamp}}</td>
<td>
{{#if block.isSolo}}
<span class="label label-danger">{{block.miningType}}</span>
{{else}}
<span class="label label-warning">{{block.miningType}}</span>
{{/if}}
</td>
<td> <td>
{{#if block.isLucky}} {{#if block.isLucky}}
<span class="label label-success">{{format-number block.variance style='percent'}}</span> <span class="label label-success">{{format-number block.variance style='percent'}}</span>
@ -33,5 +41,5 @@
</table> </table>
</div> </div>
{{else}} {{else}}
<h3>{{t "block.no_new_blocks_yet"}}</h3> <h3>No new blocks yet</h3>
{{/if}} {{/if}}

2
www/app/templates/finders.hbs

@ -16,7 +16,7 @@
<tbody> <tbody>
{{#each model.finders as |f|}} {{#each model.finders as |f|}}
<tr> <tr>
<td>{{#link-to 'account' f.address class='hash'}}{{f.address}}{{/link-to}}</td> <td>{{wallet f.address}}</td>
<td>{{format-number f.blocks}}</td> <td>{{format-number f.blocks}}</td>
</tr> </tr>
{{/each}} {{/each}}

13
www/app/templates/help.hbs

@ -10,19 +10,22 @@
<h3>lolMiner</h3> <h3>lolMiner</h3>
</div> </div>
<p class="lead">In order to mine etchash you need <p class="lead">In order to mine etchash you need
<a href="https://github.com/Lolliedieb/lolMiner-releases/releases" rel="nofollow" target="_blank">lolMiner</a> v1.12+ <a href="https://github.com/Lolliedieb/lolMiner-releases/releases" rel="nofollow" target="_blank">lolMiner</a>
v1.12+
</p>
<p>
<code>./lolMiner --pool {{config.StratumHost}}:{{config.StratumPort}} --user [YOUR_ETC_ADDRESS] -c ETC {{if (equals config.Network 'mordor') "--ecip1099-activation 84"}} --ethstratum=ETHPROXY</code>
</p> </p>
<p><code>./lolMiner --pool {{config.StratumHost}}:{{config.StratumPort}} --user [YOUR_ETC_ADDRESS] -c ETC {{if (equals config.Network 'mordor') "--ecip1099-activation 84"}} --ethstratum=ETHPROXY</code></p>
<dl class="dl-horizontal"> <dl class="dl-horizontal">
<dt>YOUR_ETC_ADDRESS</dt> <dt>YOUR_ETC_ADDRESS</dt>
<dd>This is your address for payouts, generate one with core-geth, or mine directly to exchange like <dd>This is your address for payouts, generate one with core-geth, or mine directly to exchange like
<a href="http://bittrex.com" rel="nofollow" target="_blank">Bittrex</a>.<br/> <a href="http://bittrex.com" rel="nofollow" target="_blank">Bittrex</a>.<br />
<strong>Example:</strong> <code>0xd92fa5a9732a0aec36dc8d5a6a1305dc2d3e09e6</code>. <strong>Example:</strong> <code>0xd92fa5a9732a0aec36dc8d5a6a1305dc2d3e09e6</code>.
</dd> </dd>
</dl> </dl>
<p> <p>
<strong>Full example:</strong> <strong>Full example:</strong>
<code>./lolMiner --pool {{config.StratumHost}}:{{config.StratumPort}} --user 0xd92fa5a9732a0aec36dc8d5a6a1305dc2d3e09e6 -c ETC {{if (equals config.Network 'mordor') "--ecip1099-activation 84"}} --ethstratum=ETHPROXY</code>.<br/> <code>./lolMiner --pool {{config.StratumHost}}:{{config.StratumPort}} --user 0xd92fa5a9732a0aec36dc8d5a6a1305dc2d3e09e6 -c ETC {{if (equals config.Network 'mordor') "--ecip1099-activation 84"}} --ethstratum=ETHPROXY</code>.<br />
</p> </p>
</div> </div>
@ -52,7 +55,7 @@ pool1={{config.StratumHost}}:{{config.StratumPort}}
<h4>Advice</h4> <h4>Advice</h4>
<p>CPU mining is not recommended.</p> <p>CPU mining is not recommended.</p>
<h4>Terms of Service</h4> <h4>Terms of Service</h4>
<p>By using the pool you accept all possible risks related to experimental software usage.<br/> <p>By using the pool you accept all possible risks related to experimental software usage.<br />
Pool owner can't compensate any irreversible losses, but will do his best to prevent worst case. Pool owner can't compensate any irreversible losses, but will do his best to prevent worst case.
</p> </p>
</p> </p>

190
www/app/templates/index.hbs

@ -1,177 +1,83 @@
<div class="jumbotron"> <div class="jumbotron-brand">
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-12"> <div class="col-md-5">
<div class="alert alert-info text-center join_telegram"> <div class="row">
Join our <a class="alert-link" href="https://discord.gg/FDx7TzXDFQ">Discord</a> for support! <h1 style="font-size: 24px">
<div class="etc-green">
<strong><span class="logo-2">ETHW Pool</span></strong>
</div> </div>
</h1>
</div> </div>
<div class="row" style="padding:15px 5px;">
<strong>Min. payout threshold: {{config.PayoutThreshold}}</strong>, Payouts are continuos throughout the day.
<br />
<span class="label label-success">PPLNS</span>/<span class="label label-danger">SOLO</span> Stable and
profitable pool with regular payouts.
</div> </div>
<div class="row">
<div class="col-md-4">
<strong>{{t "home.min_payout_threshold"}}: {{config.PayoutThreshold}} {{config.Unit}}</strong> / {{t
"home.payouts_run" interval=config.PayoutInterval}}<br />
<span class="label label-success">PPLNS</span> {{t "home.payout_scheme_detail"}}
</div> </div>
<div class="col-md-4 stats"> <div class="col-md-3 stats">
<div class="stats-box"> <div><i class="fa fa-users"></i> Miners Online: <span id="poolHashrate">{{format-number
<div><i class="fa fa-users"></i> {{t "home.miners_online"}}: <span id="poolHashrate">{{format-number
stats.model.minersTotal}}</span></div> stats.model.minersTotal}}</span></div>
<div><i class="fa fa-tachometer"></i> {{t "home.pool_hashrate"}}: <span id="poolHashrate">{{format-hashrate <div><i class="fa fa-tachometer"></i> Pool Hashrate: <span id="poolHashrate">{{format-hashrate
stats.model.hashrate}}</span></div> stats.model.hashrate}}</span></div>
<div><i class="fa fa-money"></i> {{t "home.pool_fee"}}: <span id="poolFee" <div><i class="fa fa-money"></i> Pool Fee: <span id="poolFee"
class="label label-success">{{config.PoolFee}}</span></div> class="label label-success">{{config.PoolFee}}</span></div>
{{#if stats.model.stats.lastBlockFound}} {{#if stats.model.stats.lastBlockFound}}
<div><i class="fa fa-clock-o"></i> {{t "home.last_block_found"}}: <span>{{format-relative (seconds-to-ms <div><i class="fa fa-clock-o"></i> Last Block Found: <span>{{format-relative (seconds-to-ms
stats.model.stats.lastBlockFound)}}</span></div> stats.model.stats.lastBlockFound)}}</span></div>
{{/if}} {{/if}}
<div><i class="fa fa-clock-o"></i> {{t "home.block_time"}}: <span>{{format-number stats.blockTime}} s</span> <div><i class="fa fa-clock-o"></i> AVG BLOCK TIME: <span>{{format-number stats.blockTime}} s</span></div>
</div> <div><i class="fa fa-gears"></i>Epoch: <span>{{format-number epoch}}</span> DAG Size: <span>{{format-number
<div><i class="fa fa-gears"></i> {{t "home.epoch"}}: <span>{{format-number epoch}}</span> {{t dag}} GB</span></div>
"home.dag_Size"}}:
<span>{{format-number
dag}} GB</span>
</div> </div>
</div>
</div>
<div class="col-md-4 stats"> <div class="col-md-4 stats">
<div class="stats-box"> <div><i class="fa fa-unlock-alt"></i> Network Difficulty: <span>{{with-metric-prefix stats.difficulty}}</span>
<div><i class="fa fa-unlock-alt"></i> {{t "home.network_difficulty"}}: <span>{{with-metric-prefix
stats.difficulty}}</span></div>
<div><i class="fa fa-tachometer"></i> {{t "home.network_hashrate"}}: <span>{{format-hashrate
stats.hashrate}}</span></div>
<div><i class="fa fa-bars"></i> {{t "home.blockchain_height"}}: <span>{{format-number stats.height}}</span>
</div> </div>
<div><i class="fa fa-clock-o"></i> {{t "home.current_round_variance"}}: <span>{{format-number <div><i class="fa fa-tachometer"></i> Network Hashrate: <span>{{format-hashrate stats.hashrate}}</span></div>
stats.roundVariance style='percent'}}</span></div> <div><i class="fa fa-bars"></i> Mining Block: <span>{{stats.height}}</span></div>
<div><i class="fa fa-clock-o"></i> Luck: <span>{{format-number stats.roundVariance style='percent'}}</span>
</div>
<div><i class="fa fa-credit-card-alt fa-fw"></i> Current price: <span>$ {{model.exchangedata.price_usd}}</span>
</div> </div>
<div><i class="fa fa-money"></i> {{t "home.current_price"}}: <span>$
{{format-number model.exchangedata.price_usd maximumFractionDigits='8'}}</span></div>
</div> </div>
</div> </div>
</div> </div>
</div> </div>
<div class="container"> <div class="container">
<div>
{{high-charts mode=chartMode chartOptions=chartOptions content=chartData}}
</div>
<div class="stats"> <div class="stats">
<h3>{{t "home.query_history"}}</h3> <h4>Your Stats &amp; Payment History</h4>
<div class="input-group"> <div class="input-group">
{{input value=cachedLogin class="form-control" placeholder=(t "home.input.enter_your_wallet_address")}} {{input value=cachedLogin class="form-control" placeholder="Your wallet address"}}
<span class="input-group-btn"> <span class="input-group-btn">
<button class="btn btn-primary" type="button" {{action 'lookup' cachedLogin}}> <button class="btn btn-primary btn-etc" type="button" {{action 'lookup' cachedLogin}}>
<span style="display: inline;"><i class="fa fa-search"></i> {{t "home.button.lookup"}}</span> <span style="display: inline;"><i class="fa fa-search"></i> Search</span>
</button> </button>
</span> </span>
</div> </div>
</div> </div>
<div> <div>
<hr /> {{#if config.highcharts.main.enabled}}
<div class="row"> <div class="container">
<div class="col-md-4 col-sm-12"> {{high-charts mode=mode chartOptions=chartOptions content=chartData}}
<h5 class="note note-info text-center">
<span class="label label-success">8b</span>&nbsp;<a href="./#/help" title={{t "home.settings.help" }}><b>{{t
"home.settings.title" hashes="> 800"}} & NiceHash</b></a>
<br>
{{t "home.settings.difficulty" diff="8"}}
<br><br>
<b>{{t "home.settings.stratum_mining"}}:</b>
<br><br>
<code>stratum+tcp://{{config.StratumHost}}:{{config.StratumPort}}</code>
</h5>
</div>
</div>
<div class="row command_lines">
<!-- Nav tabs -->
<ul class="nav nav-tabs" role="tablist">
<li role="presentation" class="active"><a href="#windows_settings" aria-controls="home" role="tab"
data-toggle="tab">{{t "home.settings.commands.windows"}}</a></li>
<li role="presentation"><a href="#smos_settings" aria-controls="profile" role="tab" data-toggle="tab">{{t
"home.settings.commands.smos"}}</a></li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="windows_settings">
<div style="padding:15px;">
<h5>{{t "home.settings.commands.windows_instruction"}}</h5>
<div class="panel-group" id="windows_settings_windows_tab" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="win_headingOne">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#windows_settings_windows_tab"
href="#win_collapseOne" aria-expanded="true" aria-controls="win_collapseOne">
lolMiner
</a>
</h4>
</div>
<div id="win_collapseOne" class="panel-collapse collapse in" role="tabpanel"
aria-labelledby="headingOne">
<div class="panel-body">
<code>
lolMiner --coin {{config.Unit}} --pool {{config.StratumHost}}:{{config.StratumPort}} --user wallet_address.WorkerName</code>
</div>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="win_headingTwo">
<h4 class="panel-title">
<a class="collapsed" role="button" data-toggle="collapse"
data-parent="#windows_settings_windows_tab" href="#win_collapseTwo" aria-expanded="false"
aria-controls="win_collapseTwo">
PhoenixMiner
</a>
</h4>
</div>
<div id="win_collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo">
<div class="panel-body">
<code>
PhoenixMiner -pool {{config.StratumHost}}:{{config.StratumPort}} -wal wallet_address.WorkerName -coin etc</code>
</div>
</div>
</div>
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="smos_settings">
<div style="padding:15px;">
<h5>{{t "home.settings.commands.windows_instruction"}}</h5>
<div class="panel-group" id="smos_settings_smos_tab" role="tablist" aria-multiselectable="true">
<div class="panel panel-default">
<div class="panel-heading" role="tab" id="smos_headingOne">
<h4 class="panel-title">
<a role="button" data-toggle="collapse" data-parent="#smos_settings_smos_tab"
href="#smos_collapseOne" aria-expanded="true" aria-controls="smos_collapseOne">
lolMiner
</a>
</h4>
</div>
<div id="smos_collapseOne" class="panel-collapse collapse in" role="tabpanel"
aria-labelledby="headingOne">
<div class="panel-body">
<code>--coin {{config.Unit}} --pool {{config.StratumHost}}:{{config.StratumPort}} --user wallet_address.WorkerName
</code>
</div>
</div> </div>
{{/if}}
<div class="container">
{{high-charts mode=mode chartOptions=chartDiff content=chartData}}
</div> </div>
<div class="panel panel-default"> <div class="jumbotron">
<div class="panel-heading" role="tab" id="smos_headingTwo"> <div class="container">
<h4 class="panel-title"> <h3 class="text-center" style="padding: 0 0 5px 0; margin: 0 0 40px 0;"> Instructions</h3>
<a class="collapsed" role="button" data-toggle="collapse" data-parent="#smos_settings_smos_tab" <div class="row">
href="#smos_collapseTwo" aria-expanded="false" aria-controls="smos_collapseTwo"> <div class="col-md-12">
PhoenixMiner <p class="lead text-center">
<a href="#/help" class="ul-link">
<span class="ul ul-danger">stratum</span><br /><br />
</a> </a>
</h4> <code>{{config.StratumHost}}:{{config.StratumPort}}</code><br /> <br />
</div> <code>Nicehash Europe password: #</code>
<div id="smos_collapseTwo" class="panel-collapse collapse" role="tabpanel" aria-labelledby="headingTwo"> </p>
<div class="panel-body">
<code>
-pool {{config.StratumHost}}:{{config.StratumPort}} -wal wallet_address.WorkerName -coin etc</code>
</div>
</div>
</div>
</div>
</div> </div>
</div> </div>
</div> </div>

8
www/app/templates/luck.hbs

@ -2,10 +2,10 @@
<table class="table table-condensed table-striped"> <table class="table table-condensed table-striped">
<thead> <thead>
<tr> <tr>
<th>{{t "luck.blocks"}}</th> <th>Blocks</th>
<th>{{t "luck.shares_diff"}}</th> <th>Shares/Diff</th>
<th>{{t "luck.uncle_rate"}}</th> <th>Uncle Rate</th>
<th>{{t "luck.orphan_rate"}}</th> <th>Orphan Rate</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>

9
www/app/templates/miners.hbs

@ -14,6 +14,7 @@
<th>Login</th> <th>Login</th>
<th>Hashrate</th> <th>Hashrate</th>
<th>Last Beat</th> <th>Last Beat</th>
<th>Mining Type</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -22,6 +23,14 @@
<td>{{#link-to 'account' m.login class='hash'}}{{m.login}}{{/link-to}}</td> <td>{{#link-to 'account' m.login class='hash'}}{{m.login}}{{/link-to}}</td>
<td>{{format-hashrate m.hr}}</td> <td>{{format-hashrate m.hr}}</td>
<td>{{format-date-locale m.lastBeat}}</td> <td>{{format-date-locale m.lastBeat}}</td>
<td>
{{#if m.solo}}
<span class="label label-danger">solo</span>
{{else}}
<span class="label label-warning">pplns</span>
{{/if}}
</td>
</tr> </tr>
{{/each}} {{/each}}
</tbody> </tbody>

26
www/app/templates/payments.hbs

@ -1,20 +1,20 @@
<div class="jumbotron"> <div class="jumbotron-brand">
<div class="container"> <div class="container">
<p class="lead">{{t "payments.pay_tx"}}</p> <p class="lead">Pool always pays tx fees from it's own pocket for now.</p>
<strong>{{t "payments.total_payments_sent"}}:</strong> <span class="label label-info">{{model.paymentsTotal}}</span> <strong>Total payments sent:</strong> <span class="label label-info">{{model.paymentsTotal}}</span>
</div> </div>
</div> </div>
<div class="container"> <div class="container">
{{#if model.payments}} {{#if model.payments}}
<h3>{{t "payments.latest_payouts"}}</h3> <h4>Latest Payouts</h4>
<div class="table-responsive"> <div class="table-responsive">
<table class="table table-condensed table-striped"> <table class="table table-condensed table-striped">
<thead> <thead>
<tr> <tr>
<th>{{t "payments.time"}}</th> <th>Time</th>
<th>{{t "payments.amount"}}</th> <th>Amount</th>
<th>{{t "payments.address"}}</th> <th>Address</th>
<th>{{t "payments.txid"}}</th> <th>Tx ID</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
@ -23,12 +23,12 @@
<td>{{format-date-locale tx.timestamp}}</td> <td>{{format-date-locale tx.timestamp}}</td>
<td>{{format-number tx.formatAmount}}</td> <td>{{format-number tx.formatAmount}}</td>
<td> <td>
<a href="{{t " links.blockExplorerLink_address"}}{{tx.address}}" class="hash" rel="nofollow" <a href="https://etc.blockscout.com/address/{{tx.address}}" class="hash" rel="nofollow"
target="_blank">{{tx.address}}</a> target="_blank">{{wallet tx.address}}</a>
</td> </td>
<td> <td>
<a href="{{t " links.blockExplorerLink_tx"}}{{tx.tx}}" class="hash" rel="nofollow" <a href="https://etc.blockscout.com/tx/{{tx.tx}}" class="hash" rel="nofollow" target="_blank">{{format-tx
target="_blank">{{format-tx tx.tx}}</a> tx.tx}}</a>
</td> </td>
</tr> </tr>
{{/each}} {{/each}}
@ -36,6 +36,6 @@
</table> </table>
</div> </div>
{{else}} {{else}}
<h3>{{t "payments.no_payouts_yet"}}</h3> <h3>No payouts yet</h3>
{{/if}} {{/if}}
</div> </div>

45
www/config/environment.js

@ -15,27 +15,57 @@ module.exports = function (environment) {
APP: { APP: {
// API host and port // API host and port
ApiUrl: '//192.168.178.27/', ApiUrl: '//192.168.178.41/',
// HTTP mining endpoint // HTTP mining endpoint
HttpHost: 'http://192.168.178.27', HttpHost: 'http://192.168.178.41',
HttpPort: 8888, HttpPort: 8888,
// Stratum mining endpoint // Stratum mining endpoint
StratumHost: 'example.net', StratumHost: '192.168.178.41',
StratumPort: 8008, StratumPort: 3001,
// The ETC network // The ETC network
Unit: 'ETC', Unit: 'ETC',
Currency: 'USD', Mining: 'SOLO',
// Fee and payout details // Fee and payout details
PoolFee: '1%', PoolFee: '1.0%',
PayoutThreshold: '0.5 ETC', PayoutThreshold: '0.5 ETC',
BlockReward: 2.56, BlockReward: 2.56,
// For network hashrate (change for your favourite fork) // For network hashrate (change for your favourite fork)
BlockTime: 13.2 BlockTime: 14.4,
highcharts: {
main: {
enabled: true,
height: 200,
type: 'spline',
color: '',
labelColor: '#909090',
lineColor: '#404850',
tickColor: '#404850',
gridLineColor: '#404850',
gridLineWidthX: 1,
gridLineWidthY: 1,
backgroundColor: 'transparent',
title: '',
ytitle: '',
interval: 180000,
chartInterval: 900000
},
account: {
enabled: true,
height: 300,
type: 'spline',
color: ['', ''],
title: '',
ytitle: '',
interval: 180000,
chartInterval: 900000,
paymentInterval: 30000
}
}
} }
}; };
@ -68,4 +98,3 @@ module.exports = function (environment) {
return ENV; return ENV;
}; };

Loading…
Cancel
Save