diff --git a/README.md b/README.md index 85d400c..756a269 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,8 @@ +## This repo is looking for maintainers! Please reach out if interested. + +-------- + + # NOMP ![NOMP Logo](http://zone117x.github.io/node-open-mining-portal/logo.svg "NOMP Logo") #### Node Open Mining Portal @@ -8,6 +13,12 @@ responsive user-friendly front-end website featuring mining instructions, in-dep #### Production Usage Notice This is beta software. All of the following are things that can change and break an existing NOMP setup: functionality of any feature, structure of configuration files and structure of redis data. If you use this software in production then *DO NOT* pull new code straight into production usage because it can and often will break your setup and require you to tweak things like config files or redis data. +#### Paid Solution +Usage of this software requires abilities with sysadmin, database admin, coin daemons, and sometimes a bit of programming. Running a production pool can literally be more work than a full-time job. + + +**Coin switching & auto-exchanging for payouts in BTC/LTC** to miners is a feature that very likely will not be included in this project. + #### Table of Contents * [Features](#features) @@ -104,21 +115,13 @@ didn't follow the instructions in this README. Please __read the usage instructi If your pool uses NOMP let us know and we will list your website here. ##### Some pools using NOMP or node-stratum-module: -* http://chunkypools.com * http://clevermining.com -* http://rapidhash.net * http://suchpool.pw * http://hashfaster.com * http://miningpoolhub.com -* http://teamdoge.com -* http://miningwith.us * http://kryptochaos.com -* http://uberpools.org -* http://onebtcplace.com -* http://minr.es -* http://mining.theminingpools.com -* http://www.omargpools.ca/pools.html -* http://pool.trademybit.com/ +* http://miningpools.tk +* http://umine.co.uk Usage ===== @@ -348,7 +351,7 @@ Here is an example of the required fields: source code as the pchMessageStart variable. For example, litecoin mainnet magic: http://git.io/Bi8YFw And for litecoin testnet magic: http://git.io/NXBYJA */ - "peerMagic": "fbc0b6db" //optional + "peerMagic": "fbc0b6db", //optional "peerMagicTestnet": "fcc1b7dc" //optional //"txMessages": false, //options - defaults to false @@ -524,7 +527,7 @@ output from NOMP. #### Upgrading NOMP When updating NOMP to the latest code its important to not only `git pull` the latest from this repo, but to also update -the `node-statum-pool` and `node-multi-hashing` modules, and any config files that may have been changed. +the `node-stratum-pool` and `node-multi-hashing` modules, and any config files that may have been changed. * Inside your NOMP directory (where the init.js script is) do `git pull` to get the latest NOMP code. * Remove the dependenices by deleting the `node_modules` directory with `rm -r node_modules`. * Run `npm update` to force updating/reinstalling of the dependencies. diff --git a/coins/21coin.json b/coins/21coin.json index 8aa9ea5..5fa143c 100644 --- a/coins/21coin.json +++ b/coins/21coin.json @@ -1,5 +1,7 @@ { "name": "21coin", "symbol": "21", - "algorithm": "sha256" + "algorithm": "sha256", │····································· + "peerMagic": "21212121", │····································· + "peerMagicTestnet": "01fefe05" } diff --git a/coins/42.json b/coins/42.json new file mode 100644 index 0000000..a3f8b47 --- /dev/null +++ b/coins/42.json @@ -0,0 +1,5 @@ +{ + "name": "42", + "symbol": "42", + "algorithm": "scrypt" +} diff --git a/coins/alphacoin.json b/coins/alphacoin.json index 2d25d0e..c1b4246 100644 --- a/coins/alphacoin.json +++ b/coins/alphacoin.json @@ -1,5 +1,7 @@ { "name": "Alphacoin", "symbol": "ALF", - "algorithm": "scrypt" -} \ No newline at end of file + "algorithm": "scrypt", + "peerMagic": "fbc0b6db", + "peerMagicTestnet": "fcc1b7dc" +} diff --git a/coins/benjamins.json b/coins/benjamins.json index e73a1b6..04ca3c0 100644 --- a/coins/benjamins.json +++ b/coins/benjamins.json @@ -1,5 +1,7 @@ { "name": "Benjamins", "symbol": "BEN", - "algorithm": "sha256" + "algorithm": "sha256", + "peerMagic": "de698778", │····································· + "peerMagicTestnet": "0b110907" } diff --git a/coins/bottlecaps.json b/coins/bottlecaps.json index 1dcccb9..8274e17 100644 --- a/coins/bottlecaps.json +++ b/coins/bottlecaps.json @@ -1,5 +1,7 @@ { "name": "Bottlecaps", "symbol": "CAP", - "algorithm": "scrypt" -} \ No newline at end of file + "algorithm": "scrypt", + "peerMagic": "e4e8e9e5", + "peerMagicTestnet": "cdf2c0ef" +} diff --git a/coins/bunnycoin.json b/coins/bunnycoin.json new file mode 100644 index 0000000..55d8fe7 --- /dev/null +++ b/coins/bunnycoin.json @@ -0,0 +1,7 @@ +{ + "name": "BunnyCoin", + "symbol": "BUN", + "algorithm": "scrypt", + "peerMagic": "c0c0c0c0", + "peerMagicTestnet": "fcc1b7dc" + } diff --git a/coins/casinocoin.json b/coins/casinocoin.json index d6b396f..fa38a54 100644 --- a/coins/casinocoin.json +++ b/coins/casinocoin.json @@ -1,5 +1,7 @@ { "name": "Casinocoin", "symbol": "CSC", - "algorithm": "scrypt" -} \ No newline at end of file + "algorithm": "scrypt", + "peerMagic": "fac3b6da", + "peerMagicTestnet": "fcc1b7dc" +} diff --git a/coins/coino.json b/coins/coino.json new file mode 100644 index 0000000..8d30f75 --- /dev/null +++ b/coins/coino.json @@ -0,0 +1,7 @@ +{ + "name": "Coino", + "symbol": "COINO", + "algorithm": "scrypt", + "peerMagic": "f1d1a7d8", + "peerMagicTestnet": "fcc1b7dc" +} diff --git a/coins/cryptogenicbullion.json b/coins/cryptogenicbullion.json new file mode 100644 index 0000000..dac937c --- /dev/null +++ b/coins/cryptogenicbullion.json @@ -0,0 +1,7 @@ +{ + "name": "CryptogenicBullion", + "symbol": "CGB", + "algorithm": "scrypt", + "peerMagic": "e4e8e9e5", + "peerMagicTestnet": "cdf2c0ef" +} diff --git a/coins/cryptographicanomaly.json b/coins/cryptographicanomaly.json new file mode 100644 index 0000000..8c97ff1 --- /dev/null +++ b/coins/cryptographicanomaly.json @@ -0,0 +1,7 @@ +{ + "name": "CryptographicAnomaly", + "symbol": "CGA", + "algorithm": "scrypt", + "peerMagic": "fbc0b6db", + "peerMagicTestnet": "fcc1b7dc" +} diff --git a/coins/digibyte.json b/coins/digibyte.json index ed65fed..52ad88e 100644 --- a/coins/digibyte.json +++ b/coins/digibyte.json @@ -1,5 +1,7 @@ { "name": "Digibyte", "symbol": "DGB", - "algorithm": "scrypt" + "algorithm": "scrypt", + "peerMagic": "fac3b6da", + "peerMagicTestnet": "fdc8bddd" } \ No newline at end of file diff --git a/coins/emark.json b/coins/emark.json index d14cd3e..076b338 100644 --- a/coins/emark.json +++ b/coins/emark.json @@ -1,5 +1,6 @@ { "name": "eMark", "symbol": "DEM", - "algorithm": "sha256" + "algorithm": "sha256", + "reward": "POS" } diff --git a/coins/fluttercoin.json b/coins/fluttercoin.json new file mode 100644 index 0000000..81b5dfb --- /dev/null +++ b/coins/fluttercoin.json @@ -0,0 +1,5 @@ +{ + "name": "FlutterCoin", + "symbol": "FLT", + "algorithm": "scrypt" +} diff --git a/coins/globaltoken.json b/coins/globaltoken.json new file mode 100644 index 0000000..580b5cd --- /dev/null +++ b/coins/globaltoken.json @@ -0,0 +1,7 @@ +{ + "name": "GlobalToken", + "symbol": "GLT", + "algorithm": "sha256", + "peerMagic": "c708d32d", + "peerMagicTestnet": "3a6f375b" +} diff --git a/coins/infinitecoin.conf b/coins/infinitecoin.conf new file mode 100644 index 0000000..a81791b --- /dev/null +++ b/coins/infinitecoin.conf @@ -0,0 +1,7 @@ +{ + "name": "Infinitecoin", + "symbol": "IFC", + "algorithm": "scrypt", + "peerMagic": "fbc0b6db", + "peerMagicTestnet": "fcc1b7dc" +} diff --git a/coins/kumacoin.json b/coins/kumacoin.json new file mode 100644 index 0000000..ab7e895 --- /dev/null +++ b/coins/kumacoin.json @@ -0,0 +1,6 @@ +{ + "name": "Kumacoin", + "symbol": "KUMA", + "algorithm": "quark", + "mposDiffMultiplier": 256 +} diff --git a/coins/litecoin.json b/coins/litecoin.json index 588af55..33d5d55 100644 --- a/coins/litecoin.json +++ b/coins/litecoin.json @@ -3,5 +3,5 @@ "symbol": "LTC", "algorithm": "scrypt", "peerMagic": "fbc0b6db", - "peerMagicTestnet": "fcc1b7dc" -} \ No newline at end of file + "peerMagicTestnet": "fdd2c8f1" +} diff --git a/coins/mazacoin.json b/coins/mazacoin.json index 451738c..9bc4ed9 100644 --- a/coins/mazacoin.json +++ b/coins/mazacoin.json @@ -1,5 +1,7 @@ { "name": "Mazacoin", "symbol": "MZC", - "algorithm": "sha256" + "algorithm": "sha256", + "peerMagic": "f8b503df", │····································· + "peerMagicTestnet": "05fea901" } diff --git a/coins/monacoin.json b/coins/monacoin.json new file mode 100644 index 0000000..d8897d4 --- /dev/null +++ b/coins/monacoin.json @@ -0,0 +1,5 @@ +{ + "name": "Monacoin", + "symbol": "MONA", + "algorithm": "scrypt" +} \ No newline at end of file diff --git a/coins/sayacoin.json b/coins/sayacoin.json new file mode 100644 index 0000000..933c879 --- /dev/null +++ b/coins/sayacoin.json @@ -0,0 +1,5 @@ +{ + "name": "Sayacoin", + "symbol": "SYC", + "algorithm": "sha256" +} \ No newline at end of file diff --git a/coins/sha1coin.json b/coins/sha1coin.json new file mode 100644 index 0000000..81e0fd4 --- /dev/null +++ b/coins/sha1coin.json @@ -0,0 +1,5 @@ +{ + "name": "Sha1coin", + "symbol": "SHA", + "algorithm": "sha1coin" +} diff --git a/coins/viacoin.json b/coins/viacoin.json new file mode 100644 index 0000000..30157c9 --- /dev/null +++ b/coins/viacoin.json @@ -0,0 +1,7 @@ +{ + "name": "Viacoin", + "symbol": "VIA", + "algorithm": "scrypt", + "peerMagic": "0f68c6cb", + "peerMagicTestnet": "a9c5ef92" +} diff --git a/libs/api.js b/libs/api.js index 3a433ab..1fe2804 100644 --- a/libs/api.js +++ b/libs/api.js @@ -15,9 +15,11 @@ module.exports = function(logger, portalConfig, poolConfigs){ this.handleApiRequest = function(req, res, next){ switch(req.params.method){ case 'stats': + res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(portalStats.statsString); return; case 'pool_stats': + res.writeHead(200, { 'Content-Type': 'application/json' }); res.end(JSON.stringify(portalStats.statPoolHistory)); return; case 'live_stats': @@ -51,4 +53,4 @@ module.exports = function(logger, portalConfig, poolConfigs){ } }; -}; \ No newline at end of file +}; diff --git a/libs/paymentProcessor.js b/libs/paymentProcessor.js index 30054a3..9e0fc84 100644 --- a/libs/paymentProcessor.js +++ b/libs/paymentProcessor.js @@ -70,10 +70,21 @@ function SetupForPool(logger, poolOptions, setupFinished){ callback(true); } else if (!result.response || !result.response.ismine) { - logger.error(logSystem, logComponent, - 'Daemon does not own pool address - payment processing can not be done with this daemon, ' - + JSON.stringify(result.response)); - callback(true); + daemon.cmd('getaddressinfo', [poolOptions.address], function(result) { + if (result.error){ + logger.error(logSystem, logComponent, 'Error with payment processing daemon, getaddressinfo failed ... ' + JSON.stringify(result.error)); + callback(true); + } + else if (!result.response || !result.response.ismine) { + logger.error(logSystem, logComponent, + 'Daemon does not own pool address - payment processing can not be done with this daemon, ' + + JSON.stringify(result.response)); + callback(true); + } + else{ + callback() + } + }, true); } else{ callback() @@ -169,7 +180,7 @@ function SetupForPool(logger, poolOptions, setupFinished){ var workers = {}; for (var w in results[0]){ - workers[w] = {balance: coinsToSatoshies(parseInt(results[0][w]))}; + workers[w] = {balance: coinsToSatoshies(parseFloat(results[0][w]))}; } var rounds = results[1].map(function(r){ diff --git a/libs/poolWorker.js b/libs/poolWorker.js index 438a379..f1bc04c 100644 --- a/libs/poolWorker.js +++ b/libs/poolWorker.js @@ -217,12 +217,16 @@ module.exports = function(logger){ logger.debug(logSystem, logComponent, logSubCat, 'We thought a block was found but it was rejected by the daemon, share data: ' + shareData); else if (isValidBlock) - logger.debug(logSystem, logComponent, logSubCat, 'Block found: ' + data.blockHash); + logger.debug(logSystem, logComponent, logSubCat, 'Block found: ' + data.blockHash + ' by ' + data.worker); - if (isValidShare) + if (isValidShare) { + if(data.shareDiff > 1000000000) + logger.debug(logSystem, logComponent, logSubCat, 'Share was found with diff higher than 1.000.000.000!'); + else if(data.shareDiff > 1000000) + logger.debug(logSystem, logComponent, logSubCat, 'Share was found with diff higher than 1.000.000!'); logger.debug(logSystem, logComponent, logSubCat, 'Share accepted at diff ' + data.difficulty + '/' + data.shareDiff + ' by ' + data.worker + ' [' + data.ip + ']' ); - else if (!isValidShare) + } else if (!isValidShare) logger.debug(logSystem, logComponent, logSubCat, 'Share rejected: ' + shareData); handlers.share(isValidShare, isValidBlock, data) @@ -306,7 +310,7 @@ module.exports = function(logger){ if (pools[currentPool]) pools[currentPool].getStratumServer().handleNewClient(socket); else - pools[initialPool].getStratumServer().handleNewClient(socket); + pools[initalPool].getStratumServer().handleNewClient(socket); }).listen(parseInt(port), function() { logger.debug(logSystem, logComponent, logSubCat, 'Switching "' + switchName diff --git a/libs/shareProcessor.js b/libs/shareProcessor.js index 90e1b0b..c1a7598 100644 --- a/libs/shareProcessor.js +++ b/libs/shareProcessor.js @@ -36,7 +36,7 @@ module.exports = function(logger, portalConfig, poolConfig, singleCoinPayoutPort logger.error(logSystem, logComponent, logSubCat, 'Redis client had an error: ' + JSON.stringify(err)) }); connection.on('end', function(){ - logger.error(logSystem, logComponent, logSubCat, 'Connection to redis database as been ended'); + logger.error(logSystem, logComponent, logSubCat, 'Connection to redis database has been ended'); }); connection.info(function(error, response){ diff --git a/libs/stats.js b/libs/stats.js index e128190..1b22eb9 100644 --- a/libs/stats.js +++ b/libs/stats.js @@ -114,7 +114,7 @@ module.exports = function(logger, portalConfig, poolConfigs){ ['hgetall', ':stats'], ['scard', ':blocksPending'], ['scard', ':blocksConfirmed'], - ['scard', ':blocksOrphaned'] + ['scard', ':blocksKicked'] ]; var commandsPerCoin = redisCommandTemplates.length; @@ -274,9 +274,9 @@ module.exports = function(logger, portalConfig, poolConfigs){ var i = -1; var byteUnits = [ ' KH', ' MH', ' GH', ' TH', ' PH' ]; do { - hashrate = hashrate / 1024; + hashrate = hashrate / 1000; i++; - } while (hashrate > 1024); + } while (hashrate > 1000); return hashrate.toFixed(2) + byteUnits[i]; }; diff --git a/package.json b/package.json index f6467a2..b78c906 100644 --- a/package.json +++ b/package.json @@ -32,20 +32,20 @@ }, "dependencies": { "stratum-pool": "git://github.com/zone117x/node-stratum-pool.git", - "dateformat": "*", + "dateformat": "1.0.12", "node-json-minify": "*", - "redis": "*", + "redis": "0.12.1", "mysql": "*", - "async": "*", + "async": "1.5.2", "express": "*", "body-parser": "*", "compression": "*", "dot": "*", "colors": "*", "node-watch": "*", - "request": "*", + "request": "2.69.0", "nonce": "*", - "bignum": "*", + "bignum": "0.12.5", "extend": "*" }, "engines": { diff --git a/website/pages/getting_started.html b/website/pages/getting_started.html index c624952..a563a68 100644 --- a/website/pages/getting_started.html +++ b/website/pages/getting_started.html @@ -185,9 +185,9 @@