Browse Source

Combine API lambda and module files

pull/15/head
Luke Childs 5 years ago
parent
commit
7dbffcc838
  1. 35
      api/coins/coins.js
  2. 33
      api/coins/index.js
  3. 76
      api/data/data.js
  4. 73
      api/data/index.js
  5. 56
      api/nicehash/index.js
  6. 58
      api/nicehash/nicehash.js

35
api/coins/coins.js

@ -1,4 +1,35 @@
const sendJson = require('../send-json');
const getCoinData = require('.');
const fetch = require('isomorphic-fetch');
exports.handler = () => sendJson(getCoinData);
const getData = async endpoint => fetch(
`https://whattomine.com/${endpoint}.json`
).then(res => res.json());
const getCoinData = async () => {
const [gpu, asic] = await Promise.all([
getData('coins'),
getData('asic')
]);
const coins = Object.entries({...gpu.coins, ...asic.coins})
.filter(([_, coin]) => coin.tag !== 'NICEHASH')
.map(([name, coin]) => {
return {
symbol: String(coin.tag),
name: String(name),
marketCap: parseFloat(coin.market_cap.replace(/[$,]/g, ''), 10),
price: parseFloat(coin.exchange_rate),
priceCurrency: String(coin.tag === 'BTC' ? 'USD' : coin.exchange_rate_curr),
algorithm: String(coin.algorithm),
hashrate: parseFloat(coin.nethash, 10),
blockTimeInSeconds: parseFloat(coin.block_time, 10),
blockReward: parseFloat(coin.block_reward, 10)
};
})
.sort((a, b) => b.marketCap - a.marketCap);
return coins;
};
module.exports = getCoinData;
module.exports.handler = () => sendJson(getCoinData);

33
api/coins/index.js

@ -1,33 +0,0 @@
const fetch = require('isomorphic-fetch');
const getData = async endpoint => fetch(
`https://whattomine.com/${endpoint}.json`
).then(res => res.json());
const getCoinData = async () => {
const [gpu, asic] = await Promise.all([
getData('coins'),
getData('asic')
]);
const coins = Object.entries({...gpu.coins, ...asic.coins})
.filter(([_, coin]) => coin.tag !== 'NICEHASH')
.map(([name, coin]) => {
return {
symbol: String(coin.tag),
name: String(name),
marketCap: parseFloat(coin.market_cap.replace(/[$,]/g, ''), 10),
price: parseFloat(coin.exchange_rate),
priceCurrency: String(coin.tag === 'BTC' ? 'USD' : coin.exchange_rate_curr),
algorithm: String(coin.algorithm),
hashrate: parseFloat(coin.nethash, 10),
blockTimeInSeconds: parseFloat(coin.block_time, 10),
blockReward: parseFloat(coin.block_reward, 10)
};
})
.sort((a, b) => b.marketCap - a.marketCap);
return coins;
};
module.exports = getCoinData;

76
api/data/data.js

@ -1,4 +1,76 @@
const sendJson = require('../send-json');
const getData = require('.');
exports.handler = () => sendJson(getData);
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(),
getCoinData()
]);
const getNiceHashForCoin = coin => {
const names = {
'SHA-256': 'sha256asicboost',
'Ethash': 'daggerhashimoto',
};
const coinAlgorithm = names[coin.algorithm] || coin.algorithm;
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);
if(!nicehash) {
// See if we can fix some of these
console.log(coin.symbol, coin.name, coin.algorithm);
}
return nicehash;
})
.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 multiplier = (bitcoinHashrateCostPerSecond / hashrateCostPerSecond);
const workTime = (bitcoin.blockTimeInSeconds * multiplier);
const confirmations = Math.ceil(workTime / coin.blockTimeInSeconds);
const estimatedTimeForConfs = (coin.blockTimeInSeconds * confirmations);
return {
...coin,
attackCost: {
hashrateCostPerSecond,
attackHourlyCost,
nicehasheable,
},
bitcoinConfEquivalent: {
multiplier,
confirmations,
estimatedTimeForConfs,
},
};
})
return data;
};
module.exports = getData;
module.exports.handler = () => sendJson(getData);

73
api/data/index.js

@ -1,73 +0,0 @@
const getNiceHashData = require('../nicehash');
const getCoinData = require('../coins');
const SECONDS = 1;
const MINUTES = SECONDS * 60;
const HOURS = MINUTES * 60;
const getData = async () => {
const [nicehashAlgorithms, coins] = await Promise.all([
getNiceHashData(),
getCoinData()
]);
const getNiceHashForCoin = coin => {
const names = {
'SHA-256': 'sha256asicboost',
'Ethash': 'daggerhashimoto',
};
const coinAlgorithm = names[coin.algorithm] || coin.algorithm;
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);
if(!nicehash) {
// See if we can fix some of these
console.log(coin.symbol, coin.name, coin.algorithm);
}
return nicehash;
})
.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 multiplier = (bitcoinHashrateCostPerSecond / hashrateCostPerSecond);
const workTime = (bitcoin.blockTimeInSeconds * multiplier);
const confirmations = Math.ceil(workTime / coin.blockTimeInSeconds);
const estimatedTimeForConfs = (coin.blockTimeInSeconds * confirmations);
return {
...coin,
attackCost: {
hashrateCostPerSecond,
attackHourlyCost,
nicehasheable,
},
bitcoinConfEquivalent: {
multiplier,
confirmations,
estimatedTimeForConfs,
},
};
})
return data;
};
module.exports = getData;

56
api/nicehash/index.js

@ -1,56 +0,0 @@
const fetch = require('isomorphic-fetch');
const SECONDS = 1;
const MINUTES = SECONDS * 60;
const HOURS = MINUTES * 60;
const DAYS = HOURS * 24;
const getData = async endpoint => fetch(
'https://api2.nicehash.com/main/api/v2/' + endpoint
).then(res => res.json());
const convertToUnit = (value, unit) => {
const unitExponent = [
{units: ['H', 'G', 'SOL'], exponent: 0},
{units: ['KH', 'KG', 'KSOL'], exponent: 1},
{units: ['MSOL', 'MH'], exponent: 2},
{units: ['GH'], exponent: 3},
{units: ['TH'], exponent: 4},
{units: ['PH'], exponent: 5}
];
const {exponent} = unitExponent.find(value => value.units.includes(unit.toUpperCase()));
return value / (1000 ** exponent);
};
const getNiceHashData = async () => {
const [algorithmData, currentValues] = await Promise.all([
getData('mining/algorithms'),
getData('public/stats/global/current')
]);
const algorithms = algorithmData.miningAlgorithms
.map(value => {
const algorithm = {
id: value.order,
name: value.title
};
const {marketFactor} = value;
const {displayMarketFactor} = value;
const values = currentValues.algos.find(algo => algo.a === algorithm.id);
const pricePerHashPerDay = values.p / 100000000;
algorithm.pricePerHashPerSecond = pricePerHashPerDay / DAYS;
algorithm.hashrate = values.s;
algorithm.priceReadable = (pricePerHashPerDay * marketFactor).toFixed(4) + ` BTC/${displayMarketFactor}/day`;
algorithm.hashrateReadable = convertToUnit(algorithm.hashrate, displayMarketFactor).toFixed(4) + ` ${displayMarketFactor}/s`;
return algorithm;
});
return algorithms;
};
module.exports = getNiceHashData;

58
api/nicehash/nicehash.js

@ -1,4 +1,58 @@
const sendJson = require('../send-json');
const getNiceHashData = require('.');
const fetch = require('isomorphic-fetch');
exports.handler = () => sendJson(getNiceHashData);
const SECONDS = 1;
const MINUTES = SECONDS * 60;
const HOURS = MINUTES * 60;
const DAYS = HOURS * 24;
const getData = async endpoint => fetch(
'https://api2.nicehash.com/main/api/v2/' + endpoint
).then(res => res.json());
const convertToUnit = (value, unit) => {
const unitExponent = [
{units: ['H', 'G', 'SOL'], exponent: 0},
{units: ['KH', 'KG', 'KSOL'], exponent: 1},
{units: ['MSOL', 'MH'], exponent: 2},
{units: ['GH'], exponent: 3},
{units: ['TH'], exponent: 4},
{units: ['PH'], exponent: 5}
];
const {exponent} = unitExponent.find(value => value.units.includes(unit.toUpperCase()));
return value / (1000 ** exponent);
};
const getNiceHashData = async () => {
const [algorithmData, currentValues] = await Promise.all([
getData('mining/algorithms'),
getData('public/stats/global/current')
]);
const algorithms = algorithmData.miningAlgorithms
.map(value => {
const algorithm = {
id: value.order,
name: value.title
};
const {marketFactor} = value;
const {displayMarketFactor} = value;
const values = currentValues.algos.find(algo => algo.a === algorithm.id);
const pricePerHashPerDay = values.p / 100000000;
algorithm.pricePerHashPerSecond = pricePerHashPerDay / DAYS;
algorithm.hashrate = values.s;
algorithm.priceReadable = (pricePerHashPerDay * marketFactor).toFixed(4) + ` BTC/${displayMarketFactor}/day`;
algorithm.hashrateReadable = convertToUnit(algorithm.hashrate, displayMarketFactor).toFixed(4) + ` ${displayMarketFactor}/s`;
return algorithm;
});
return algorithms;
};
module.exports = getNiceHashData;
module.exports.handler = () => sendJson(getNiceHashData);

Loading…
Cancel
Save