Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 'use strict';
- const http = require("http");
- const https = require("https");
- const zlib = require("zlib");
- const net = require('net');
- const WALLET = "";
- const UPTIME_SERVER = "";
- function get_hashrate(api, body) {
- var re1 = /pool\/stats/;
- var re2 = /pool\/hashrate/;
- var re3 = /suprnova\.cc/;
- var re4 = /\/stats/;
- var re5 = /\/live_stats/;
- if (re1.exec(api)) {
- return body["pool_statistics"]["hashRate"];
- } else if (re2.exec(api)) {
- return body["data"];
- } else if (re3.exec(api)) {
- return body["hashrate"];
- } else if (re4.exec(api) || re5.exec(api)) {
- return body["pool"]["hashrate"];
- }
- };
- function complete_result(result_api, result_stratum) {
- if (result_api.hasOwnProperty("<completed>")) return;
- for (var name in result_api) if (result_api[name] == "[UNDEF]") return;
- for (var name in result_stratum) if (result_stratum[name] == "[UNDEF]") return;
- result_api["<completed>"] = 1;
- console.log("Collected all results");
- var uptime_server = net.Socket();
- uptime_server.connect(1234, UPTIME_SERVER, function() {
- console.log("Connected to uptime server");
- var str = process.env.AWS_REGION + "\n";
- for (var name in result_stratum) {
- let name2 = get_name2(name);
- str = str + name + ":\t" + result_api[name2] + "\t" + result_stratum[name] + "\n";
- }
- uptime_server.end(str);
- console.log("Wrote data to uptime server");
- });
- uptime_server.on('close', function() {
- console.log("Closed connection to uptime server");
- });
- };
- function form_stratum_status(status, socket, addr_orig) {
- let addr = (typeof addr_orig !== 'undefined' && addr_orig !== null) ? addr_orig : socket.remoteAddress;
- return (typeof addr !== 'undefined' && addr !== null) ? "[" + status + "]: " + addr : "[" + status + "]";
- };
- function test_stratum(name, host, port, result_api, result_stratum) {
- result_stratum[name] = "[UNDEF]";
- var s = net.Socket();
- var addr_orig;
- var timer = setTimeout(function() {
- s.end();
- s.destroy();
- result_stratum[name] = form_stratum_status("TIMEOUT", s, addr_orig);
- //console.log("S TIMEOUT");
- complete_result(result_api, result_stratum);
- }, 10000);
- s.connect(port, host, function() {
- addr_orig = s.remoteAddress;
- s.write('{"method":"login","params":{"login":"' + WALLET + '","pass":"x","agent":"xmr-stak-cpu/1.3.0-1.5.0"},"id":1}\n');
- });
- s.on('error', function(e) {
- result_stratum[name] = form_stratum_status("DOWN", s, addr_orig);
- //console.log("S DOWN");
- complete_result(result_api, result_stratum);
- });
- //let chunks = [];
- //s.on("data", chunk => {
- //chunks.push(chunk);
- //});
- s.on('data', function(d) {
- //let d = Buffer.concat(chunks);
- clearTimeout(timer);
- var re1 = /"job"/;
- var re2 = /"blob"/;
- var re3 = /"target"/;
- if (re1.exec(d) && re2.exec(d) && re3.exec(d)) {
- //console.log("[OK]: " + s.remoteAddress);
- result_stratum[name] = form_stratum_status("OK", s, addr_orig);
- //console.log(form_stratum_status("OK", s, addr_orig));
- } else {
- result_stratum[name] = form_stratum_status("BAD", s, addr_orig);
- //console.log("S BAD");
- console.log("Bad JSON reply from " + name + " stratum:");
- console.log(d.toString());
- }
- s.end();
- s.destroy();
- complete_result(result_api, result_stratum);
- });
- };
- function get_name2(name) {
- var re1 = /^([^\s]+) /;
- var m;
- if (m = re1.exec(name)) {
- return m[1];
- } else {
- return name;
- }
- };
- exports.handler = function(event, context, callback) {
- var result_api = {};
- var result_stratum = {};
- var pool_api = {}, pool_stratum = {};
- pool_api["moneroocean.stream"] = "https://api.moneroocean.stream/pool/stats";
- pool_stratum["moneroocean.stream"] = "gulf.moneroocean.stream:10001";
- pool_api["minexmr.com"] = "http://api.minexmr.com:8080/stats";
- pool_stratum["minexmr.com (France)"] = "pool.minexmr.com:4444";
- pool_stratum["minexmr.com (Canada)"] = "ca.minexmr.com:4444";
- pool_api["supportxmr.com"] = "https://supportxmr.com/api/pool/stats";
- pool_stratum["supportxmr.com"] = "pool.supportxmr.com:3333";
- pool_api["xmrpool.net"] = "https://api.xmrpool.net/pool/stats";
- pool_stratum["xmrpool.net"] = "mine.xmrpool.net:3333";
- pool_api["nanopool.org"] = "https://api.nanopool.org/v1/xmr/pool/hashrate";
- pool_stratum["nanopool.org (Europe 1)"] = "xmr-eu1.nanopool.org:14444";
- pool_stratum["nanopool.org (Europe 2)"] = "xmr-eu2.nanopool.org:14444";
- pool_stratum["nanopool.org (US East)"] = "xmr-us-east1.nanopool.org:14444";
- pool_stratum["nanopool.org (US West)"] = "xmr-us-west1.nanopool.org:14444";
- pool_stratum["nanopool.org (Asia)"] = "xmr-asia1.nanopool.org:14444";
- pool_api["mixpools.org"] = "https://mixpools.org:8117/stats";
- pool_stratum["mixpools.org (EU)"] = "xmr.mixpools.org:8080";
- pool_stratum["mixpools.org (US)"] = "xmr-us.mixpools.org:8080";
- pool_api["viaxmr.com"] = "https://api.viaxmr.com/pool/stats";
- pool_stratum["viaxmr.com"] = "stratum.viaxmr.com:8080";
- pool_api["monero.hashvault.pro"] = "https://monero.hashvault.pro/api/pool/stats";
- pool_stratum["monero.hashvault.pro"] = "pool.monero.hashvault.pro:3333";
- pool_api["xmr.suprnova.cc"] = "https://xmr.suprnova.cc/index.php?page=api&action=public";
- pool_stratum["xmr.suprnova.cc"] = "xmr.suprnova.cc:5222";
- pool_api["xmrpool.eu"] = "https://web.xmrpool.eu:8119/stats";
- pool_stratum["xmrpool.eu"] = "xmrpool.eu:3333";
- //pool_api["xmrpool.de"] = "http://xmrpool.de/pool/stats";
- //pool_stratum["xmrpool.de"] = "xmrpool.de:3333";
- pool_api["poolto.be"] = "http://mro.poolto.be:8117/stats";
- pool_stratum["poolto.be"] = "xmr.poolto.be:8080";
- pool_api["xmr.prohash.net"] = "http://xmr.prohash.net:8117/stats";
- pool_stratum["xmr.prohash.net"] = "xmr.prohash.net:7777";
- pool_api["xmr.mypool.online"] = "https://api.xmr.mypool.online/pool/stats";
- pool_stratum["xmr.mypool.online"] = "mine.xmr.mypool.online:3335";
- pool_api["bohemianpool.com"] = "https://bohemianpool.com/api/pool/stats";
- pool_stratum["bohemianpool.com"] = "bohemianpool.com:4444";
- pool_api["moneropool.com"] = "http://api.moneropool.com/live_stats";
- pool_stratum["moneropool.com"] = "mine.moneropool.com:3333";
- pool_api["moneropool.nl"] = "https://moneropool.nl/api/pool/stats";
- pool_stratum["moneropool.nl"] = "moneropool.nl:3333";
- pool_api["iwanttoearn.money"] = "http://iwanttoearn.money:8117/stats";
- pool_stratum["iwanttoearn.money"] = "iwanttoearn.money:3333";
- pool_api["pool.xmr.pt"] = "https://pool.xmr.pt/api/pool/stats";
- pool_stratum["pool.xmr.pt"] = "pool.xmr.pt:3333";
- pool_api["moriaxmr.com"] = "https://api.moriaxmr.com/pool/stats";
- pool_stratum["moriaxmr.com"] = "pool.moriaxmr.com:3333";
- pool_api["monero.crypto-pool.fr"] = "https://monero.crypto-pool.fr:8091/stats";
- pool_stratum["monero.crypto-pool.fr"] = "xmr.crypto-pool.fr:3333";
- pool_api["monero.miners.pro"] = "http://pool.miners.pro:8117/stats";
- pool_stratum["monero.miners.pro"] = "pool.miners.pro:3333";
- pool_api["minercircle.com"] = "https://xmr.minercircle.com:8079/stats";
- pool_stratum["minercircle.com"] = "xmr.minercircle.com:3333";
- pool_api["monero.lindon-pool.win"] = "https://monero.lindon-pool.win/api/pool/stats";
- pool_stratum["monero.lindon-pool.win"] = "monero.lindon-pool.win:3333";
- pool_api["teracycle.net"] = "http://teracycle.net:8117/stats";
- pool_stratum["teracycle.net"] = "teracycle.net:3333";
- pool_api["ratchetmining.com"] = "https://ratchetmining.com/api/pool/stats";
- pool_stratum["ratchetmining.com"] = "ratchetmining.com:3333";
- pool_api["monerohash.com"] = "https://monerohash.com/api/stats";
- pool_stratum["monerohash.com"] = "monerohash.com:3333";
- pool_api["monero.us.to"] = "http://monero.us.to:8117/stats";
- pool_stratum["monero.us.to"] = "monero.us.to:3333";
- pool_api["usxmrpool.com"] = "https://usxmrpool.com:8119/stats";
- pool_stratum["usxmrpool.com"] = "pool.usxmrpool.com:3333";
- pool_api["xmrpool.xyz"] = "https://api.xmrpool.xyz/pool/stats";
- pool_stratum["xmrpool.xyz"] = "mine.xmrpool.xyz:3333";
- pool_api["minemonero.gq"] = "http://minemonero.gq:8117/stats";
- pool_stratum["minemonero.gq"] = "minemonero.gq:3333";
- pool_api["xmr.alimabi.cn"] = "http://121.42.243.177/stats";
- pool_stratum["xmr.alimabi.cn"] = "mine1.alimabi.cn:7777";
- pool_api["pooldd.com"] = "http://minexmr.pooldd.com:8080/stats";
- pool_stratum["pooldd.com"] = "minexmr.pooldd.com:3333";
- pool_api["monero.riefly.id"] = "https://xmr.riefly.id:8119/stats";
- pool_stratum["monero.riefly.id"] = "xmr.riefly.id:3333";
- pool_api["fasthash.net"] = "https://ap43ffg.fasthash.net/pool/stats";
- pool_stratum["fasthash.net"] = "pool.fasthash.net:3333";
- pool_api["dwarfpool.com"] = "http://dwarfpool.com/xmr";
- pool_stratum["dwarfpool.com (EU)"] = "xmr-eu.dwarfpool.com:8005";
- pool_stratum["dwarfpool.com (US)"] = "xmr-usa.dwarfpool.com:8005";
- var re2 = /^https/;
- var re3 = /dwarfpool/;
- var re4 = /<b>Pool<\/b>\s+(\d+)\s+khs<br>/;
- var re5 = /^([^:]+):([^:]+)$/;
- process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
- console.log("Starting processing");
- for (var name in pool_stratum) {
- let name2 = get_name2(name);
- let api = pool_api[name2];
- let stratum = pool_stratum[name];
- let stratum_host;
- let stratum_port;
- let m;
- if (m = re5.exec(stratum)) {
- stratum_host = m[1];
- stratum_port = m[2];
- } else {
- console.log("Bad stratum: " + stratum);
- process.exit();
- }
- if (result_api.hasOwnProperty(name2)) {
- test_stratum(name, stratum_host, stratum_port, result_api, result_stratum);
- continue;
- }
- result_api[name2] = "[UNDEF]";
- let x = re2.exec(api) ? https : http;
- let timer;
- let req = x.get(api, res => {
- res.on("error", chunk => {
- result_api[name2] = "[DOWN]";
- //console.log("A DOWN");
- complete_result(result_api, result_stratum);
- });
- let chunks = [];
- res.on("data", chunk => {
- chunks.push(chunk);
- });
- res.on("end", () => {
- if (timer) clearTimeout(timer);
- try {
- let body = Buffer.concat(chunks);
- if (res.headers['content-encoding'] == 'deflate') {
- body = zlib.inflateRawSync(body);
- } else {
- body = body.toString();
- }
- var hr;
- if (re3.exec(api)) {
- var m;
- if (m = re4.exec(body)) {
- hr = m[1] * 1000;
- }
- } else {
- body = JSON.parse(body);
- hr = get_hashrate(api, body);
- }
- result_api[name2] = (typeof hr !== 'undefined' && hr !== null) ? hr : "[BAD]";
- //console.log("A OK");
- } catch (e) {
- result_api[name2] = "[BAD]";
- //console.log("A BAD");
- }
- complete_result(result_api, result_stratum);
- });
- });
- req.on("error", function(e) {
- result_api[name2] = "[DOWN]";
- //console.log("A DOWN");
- complete_result(result_api, result_stratum);
- });
- timer = setTimeout(function() {
- result_api[name2] = "[TIMEOUT]";
- req.abort();
- //console.log("A TIMEOUT");
- complete_result(result_api, result_stratum);
- }, 10000);
- test_stratum(name, stratum_host, stratum_port, result_api, result_stratum);
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement