Browse Source

Move equivalent work calculations into frontend

pull/15/head
Luke Childs 5 years ago
parent
commit
cc660b10e7
  1. 24
      api/data/data.js
  2. 39
      js/index.js

24
api/data/data.js

@ -3,10 +3,6 @@ const sendJson = require('../send-json');
const getNiceHashData = require('../nicehash/nicehash');
const getCoinData = require('../coins/coins');
const SECONDS = 1;
const MINUTES = SECONDS * 60;
const HOURS = MINUTES * 60;
const getData = async () => {
const [nicehashAlgorithms, coins] = await Promise.all([
getNiceHashData(),
@ -23,14 +19,6 @@ const getData = async () => {
return nicehashAlgorithms.find(algorithm => algorithm.name.toLowerCase() === coinAlgorithm.toLowerCase());
};
// Calculate reference bitcoin values
const bitcoin = coins.find(coin => coin.symbol === 'BTC');
if (!bitcoin) {
// Handle this
}
const bitcoinHashrateCostPerSecond = (bitcoin.hashrate * getNiceHashForCoin(bitcoin).pricePerHashPerSecond);
const data = coins
.filter(coin => {
const nicehash = getNiceHashForCoin(coin);
@ -44,25 +32,13 @@ const getData = async () => {
.map(coin => {
const nicehash = getNiceHashForCoin(coin);
// Calculate 51% attack values
const hashrateCostPerSecond = (coin.hashrate * nicehash.pricePerHashPerSecond);
const attackHourlyCost = (HOURS * hashrateCostPerSecond);
const nicehasheable = (nicehash.hashrate / coin.hashrate * 100);
// Calculate confirmation values
const bitcoinWorkMultiplier = (bitcoinHashrateCostPerSecond / hashrateCostPerSecond);
const workTime = (bitcoin.blockTimeInSeconds * bitcoinWorkMultiplier);
const bitcoinEquivalentConfirmations = Math.ceil(workTime / coin.blockTimeInSeconds);
const bitcoinEquivalentTimeForConfs = (coin.blockTimeInSeconds * bitcoinEquivalentConfirmations);
return {
...coin,
hashrateCostPerSecond,
attackHourlyCost,
nicehasheable,
bitcoinWorkMultiplier,
bitcoinEquivalentConfirmations,
bitcoinEquivalentTimeForConfs,
};
});

39
js/index.js

@ -7,6 +7,8 @@ import formatSeconds from './format-seconds';
import formatDollars from './format-dollars';
import formatHashrate from './format-hashrate';
const BITOIN_CONFIRMATIONS = 6;
document.querySelector('.version').textContent = `v${version}`;
const table = document.querySelector('table.results');
@ -43,16 +45,16 @@ const render = (coins, sortBy) => {
<a data-sort="marketCap" ${sortBy === 'marketCap' && 'data-sort-active'}>Market Cap</a>
</td>
<td>
<a data-sort="bitcoinWorkMultiplier" ${sortBy === 'bitcoinWorkMultiplier' && 'data-sort-active'}>Proof-of-Work</a>
<a data-sort="multiplier" ${sortBy === 'multiplier' && 'data-sort-active'}>Proof-of-Work</a>
</td>
<td>
<a data-sort="bitcoinEquivalentConfirmations" ${sortBy === 'bitcoinEquivalentConfirmations' && 'data-sort-active'}>Equivalent Confs</a>
<a data-sort="confirmations" ${sortBy === 'confirmations' && 'data-sort-active'}>Equivalent Confs</a>
</td>
<td>
<a data-sort="bitcoinEquivalentTimeForConfs" ${sortBy === 'bitcoinEquivalentTimeForConfs' && 'data-sort-active'}>Estimated Time</a>
<a data-sort="timeForConfs" ${sortBy === 'timeForConfs' && 'data-sort-active'}>Estimated Time</a>
</td>
<td>
<a data-sort="bitcoinWorkMultiplier" ${sortBy === 'bitcoinWorkMultiplier' && 'data-sort-active'}>Difference</a>
<a data-sort="multiplier" ${sortBy === 'multiplier' && 'data-sort-active'}>Difference</a>
</td>
</thead>
<tbody>
@ -64,9 +66,9 @@ const render = (coins, sortBy) => {
</td>
<td>${escapeHTML(formatDollars(coin.marketCap) || 'Unknown')}</td>
<td>${escapeHTML(`${coin.algorithm} @ ${formatHashrate(coin.hashrate)}`)}</td>
<td>${escapeHTML(coin.bitcoinEquivalentConfirmations.toLocaleString())} confs</td>
<td>${escapeHTML(formatSeconds(coin.bitcoinEquivalentTimeForConfs))}</td>
<td>${escapeHTML(coin.symbol === 'BTC' ? '-' : `${Math.round(coin.bitcoinWorkMultiplier).toLocaleString()}x slower`)}</td>
<td>${escapeHTML(coin.confirmations.toLocaleString())} confs</td>
<td>${escapeHTML(formatSeconds(coin.timeForConfs))}</td>
<td>${escapeHTML(coin.symbol === 'BTC' ? '-' : `${Math.round(coin.multiplier).toLocaleString()}x slower`)}</td>
</tr>
`).join('')}
</tbody>
@ -79,6 +81,27 @@ const render = (coins, sortBy) => {
fetch('/api/data')
.then(response => response.json())
.then(coins => {
// Calculate reference bitcoin values
const bitcoin = coins.find(coin => coin.symbol === 'BTC');
if (!bitcoin) {
// Handle this
}
coins = coins.map(coin => {
const multiplier = (bitcoin.hashrateCostPerSecond / coin.hashrateCostPerSecond);
const workTime = (bitcoin.blockTimeInSeconds * BITOIN_CONFIRMATIONS * multiplier);
const confirmations = Math.ceil(workTime / coin.blockTimeInSeconds);
const timeForConfs = (coin.blockTimeInSeconds * confirmations);
return {
...coin,
multiplier,
workTime,
confirmations,
timeForConfs
};
});
render(coins);
table.addEventListener('click', ({target}) => {
@ -88,4 +111,4 @@ fetch('/api/data')
render(coins, target.dataset.sort);
});
});
});

Loading…
Cancel
Save