Giter Club home page Giter Club logo

node-open-mining-portal's Introduction

This repo is looking for maintainers! Please reach out if interested.


NOMP NOMP Logo

Node Open Mining Portal

This portal is an extremely efficient, highly scalable, all-in-one, easy to setup cryptocurrency mining pool written entirely in Node.js. It contains a stratum poolserver; reward/payment/share processor; and a (not yet completed) responsive user-friendly front-end website featuring mining instructions, in-depth live statistics, and an admin center.

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

  • For the pool server it uses the highly efficient node-stratum-pool module which supports vardiff, POW & POS, transaction messages, anti-DDoS, IP banning, several hashing algorithms.

  • The portal has an MPOS compatibility mode so that the it can function as a drop-in-replacement for python-stratum-mining. This mode can be enabled in the configuration and will insert shares into a MySQL database in the format which MPOS expects. For a direct tutorial see the wiki page Setting up NOMP for MPOS usage.

  • Multi-pool ability - this software was built from the ground up to run with multiple coins simultaneously (which can have different properties and hashing algorithms). It can be used to create a pool for a single coin or for multiple coins at once. The pools use clustering to load balance across multiple CPU cores.

  • For reward/payment processing, shares are inserted into Redis (a fast NoSQL key/value store). The PROP (proportional) reward system is used with Redis Transactions for secure and super speedy payouts. There is zero risk to the pool operator. Shares from rounds resulting in orphaned blocks will be merged into share in the current round so that each and every share will be rewarded

  • This portal does not have user accounts/logins/registrations. Instead, miners simply use their coin address for stratum authentication. A minimalistic HTML5 front-end connects to the portals statistics API to display stats from from each pool such as connected miners, network/pool difficulty/hash rate, etc.

  • Coin-switching ports using coin-networks and crypto-exchange APIs to detect profitability. Miner's connect to these ports with their public key which NOMP uses to derive an address for any coin needed to be paid out.

Attack Mitigation

  • Detects and thwarts socket flooding (garbage data sent over socket in order to consume system resources).
  • Detects and thwarts zombie miners (botnet infected computers connecting to your server to use up sockets but not sending any shares).
  • Detects and thwarts invalid share attacks:
    • NOMP is not vulnerable to the low difficulty share exploits happening to other pool servers. Other pool server software has hardcoded guesstimated max difficulties for new hashing algorithms while NOMP dynamically generates the max difficulty for each algorithm based on values founds in coin source code.
    • IP banning feature which on a configurable threshold will ban an IP for a configurable amount of time if the miner submits over a configurable threshold of invalid shares.
  • NOMP is written in Node.js which uses a single thread (async) to handle connections rather than the overhead of one thread per connection, and clustering is also implemented so all CPU cores are taken advantage of.

Security

NOMP has some implicit security advantages for pool operators and miners:

  • Without a registration/login system, non-security-oriented miners reusing passwords across pools is no longer a concern.
  • Automated payouts by default and pool profits are sent to another address so pool wallets aren't plump with coins - giving hackers little reward and keeping your pool from being a target.
  • Miners can notice lack of automated payments as a possible early warning sign that an operator is about to run off with their coins.

Planned Features

  • NOMP API - Used by the website to display stats and information about the pool(s) on the portal's front-end website, and by the NOMP Desktop app to retrieve a list of available coins (and version-bytes for local wallet/address generation).

  • To reduce variance for pools just starting out which have little to no hashing power a feature is planned which will allow your own pool to connect upstream to a larger pool server. It will request work from the larger pool then redistribute the work to our own connected miners.

Community / Support

IRC

Join our subreddit /r/nomp!

Having problems getting the portal running due to some module dependency error? It's probably because you didn't follow the instructions in this README. Please read the usage instructions including requirements and downloading/installing. If you've followed the instructions completely and are still having problems then open an issue here on github or join our #nomp IRC channel and explain your problem :).

If your pool uses NOMP let us know and we will list your website here.

Some pools using NOMP or node-stratum-module:

Usage

Requirements

Seriously

Those are legitimate requirements. If you use old versions of Node.js or Redis that may come with your system package manager then you will have problems. Follow the linked instructions to get the last stable versions.

Redis security warning: be sure firewall access to redis - an easy way is to include bind 127.0.0.1 in your redis.conf file. Also it's a good idea to learn about and understand software that you are using - a good place to start with redis is data persistence.

0) Setting up coin daemon

Follow the build/install instructions for your coin daemon. Your coin.conf file should end up looking something like this:

daemon=1
rpcuser=litecoinrpc
rpcpassword=securepassword
rpcport=19332

For redundancy, its recommended to have at least two daemon instances running in case one drops out-of-sync or offline, all instances will be polled for block/transaction updates and be used for submitting blocks. Creating a backup daemon involves spawning a daemon using the -datadir=/backup command-line argument which creates a new daemon instance with it's own config directory and coin.conf file. Learn about the daemon, how to use it and how it works if you want to be a good pool operator. For starters be sure to read:

1) Downloading & Installing

Clone the repository and run npm update for all the dependencies to be installed:

git clone https://github.com/zone117x/node-open-mining-portal.git nomp
cd nomp
npm update

2) Configuration

Portal config

Inside the config_example.json file, ensure the default configuration will work for your environment, then copy the file to config.json.

Explanation for each field:

{
    /* Specifies the level of log output verbosity. Anything more severe than the level specified
       will also be logged. */
    "logLevel": "debug", //or "warning", "error"
    
    /* By default NOMP logs to console and gives pretty colors. If you direct that output to a
       log file then disable this feature to avoid nasty characters in your log file. */
    "logColors": true, 


    /* The NOMP CLI (command-line interface) will listen for commands on this port. For example,
       blocknotify messages are sent to NOMP through this. */
    "cliPort": 17117,

    /* By default 'forks' is set to "auto" which will spawn one process/fork/worker for each CPU
       core in your system. Each of these workers will run a separate instance of your pool(s),
       and the kernel will load balance miners using these forks. Optionally, the 'forks' field
       can be a number for how many forks will be spawned. */
    "clustering": {
        "enabled": true,
        "forks": "auto"
    },
    
    /* Pool config file will inherit these default values if they are not set. */
    "defaultPoolConfigs": {
    
        /* Poll RPC daemons for new blocks every this many milliseconds. */
        "blockRefreshInterval": 1000,
        
        /* If no new blocks are available for this many seconds update and rebroadcast job. */
        "jobRebroadcastTimeout": 55,
        
        /* Disconnect workers that haven't submitted shares for this many seconds. */
        "connectionTimeout": 600,
        
        /* (For MPOS mode) Store the block hashes for shares that aren't block candidates. */
        "emitInvalidBlockHashes": false,
        
        /* This option will only authenticate miners using an address or mining key. */
        "validateWorkerUsername": true,
        
        /* Enable for client IP addresses to be detected when using a load balancer with TCP
           proxy protocol enabled, such as HAProxy with 'send-proxy' param:
           http://haproxy.1wt.eu/download/1.5/doc/configuration.txt */
        "tcpProxyProtocol": false,
        
        /* If under low-diff share attack we can ban their IP to reduce system/network load. If
           running behind HAProxy be sure to enable 'tcpProxyProtocol', otherwise you'll end up
           banning your own IP address (and therefore all workers). */
        "banning": {
            "enabled": true,
            "time": 600, //How many seconds to ban worker for
            "invalidPercent": 50, //What percent of invalid shares triggers ban
            "checkThreshold": 500, //Perform check when this many shares have been submitted
            "purgeInterval": 300 //Every this many seconds clear out the list of old bans
        },
        
        /* Used for storing share and block submission data and payment processing. */
        "redis": {
            "host": "127.0.0.1",
            "port": 6379
        }
    },

    /* This is the front-end. Its not finished. When it is finished, this comment will say so. */
    "website": {
        "enabled": true,
        /* If you are using a reverse-proxy like nginx to display the website then set this to
           127.0.0.1 to not expose the port. */
        "host": "0.0.0.0",
        "port": 80,
        /* Used for displaying stratum connection data on the Getting Started page. */
        "stratumHost": "cryppit.com",
        "stats": {
            /* Gather stats to broadcast to page viewers and store in redis for historical stats
               every this many seconds. */
            "updateInterval": 15,
            /* How many seconds to hold onto historical stats. Currently set to 24 hours. */
            "historicalRetention": 43200,
            /* How many seconds worth of shares should be gathered to generate hashrate. */
            "hashrateWindow": 300
        },
        /* Not done yet. */
        "adminCenter": {
            "enabled": true,
            "password": "password"
        }
    },

    /* Redis instance of where to store global portal data such as historical stats, proxy states,
       ect.. */
    "redis": {
        "host": "127.0.0.1",
        "port": 6379
    },


    /* With this switching configuration, you can setup ports that accept miners for work based on
       a specific algorithm instead of a specific coin. Miners that connect to these ports are
       automatically switched a coin determined by the server. The default coin is the first
       configured pool for each algorithm and coin switching can be triggered using the
       cli.js script in the scripts folder.

       Miners connecting to these switching ports must use their public key in the format of
       RIPEMD160(SHA256(public-key)). An address for each type of coin is derived from the miner's
       public key, and payments are sent to that address. */
    "switching": {
        "switch1": {
            "enabled": false,
            "algorithm": "sha256",
            "ports": {
                "3333": {
                    "diff": 10,
                    "varDiff": {
                        "minDiff": 16,
                        "maxDiff": 512,
                        "targetTime": 15,
                        "retargetTime": 90,
                        "variancePercent": 30
                    }
                }
            }
        },
        "switch2": {
            "enabled": false,
            "algorithm": "scrypt",
            "ports": {
                "4444": {
                    "diff": 10,
                    "varDiff": {
                        "minDiff": 16,
                        "maxDiff": 512,
                        "targetTime": 15,
                        "retargetTime": 90,
                        "variancePercent": 30
                    }
                }
            }
        },
        "switch3": {
            "enabled": false,
            "algorithm": "x11",
            "ports": {
                "5555": {
                    "diff": 0.001
                }
            }
        }
    },

    "profitSwitch": {
        "enabled": false,
        "updateInterval": 600,
        "depth": 0.90,
        "usePoloniex": true,
        "useCryptsy": true,
        "useMintpal": true
    }
}
Coin config

Inside the coins directory, ensure a json file exists for your coin. If it does not you will have to create it. Here is an example of the required fields:

{
    "name": "Litecoin",
    "symbol": "ltc",
    "algorithm": "scrypt",

    /* Magic value only required for setting up p2p block notifications. It is found in the daemon
       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
    "peerMagicTestnet": "fcc1b7dc" //optional

    //"txMessages": false, //options - defaults to false

    //"mposDiffMultiplier": 256, //options - only for x11 coins in mpos mode
}

For additional documentation how to configure coins and their different algorithms see these instructions.

Pool config

Take a look at the example json file inside the pool_configs directory. Rename it to yourcoin.json and change the example fields to fit your setup.

Description of options:

{
    "enabled": true, //Set this to false and a pool will not be created from this config file
    "coin": "litecoin.json", //Reference to coin config file in 'coins' directory

    "address": "mi4iBXbBsydtcc5yFmsff2zCFVX4XG7qJc", //Address to where block rewards are given

    /* Block rewards go to the configured pool wallet address to later be paid out to miners,
       except for a percentage that can go to, for examples, pool operator(s) as pool fees or
       or to donations address. Addresses or hashed public keys can be used. Here is an example
       of rewards going to the main pool op, a pool co-owner, and NOMP donation. */
    "rewardRecipients": {
        "n37vuNFkXfk15uFnGoVyHZ6PYQxppD3QqK": 1.5, //1.5% goes to pool op
        "mirj3LtZxbSTharhtXvotqtJXUY7ki5qfx": 0.5, //0.5% goes to a pool co-owner

        /* 0.1% donation to NOMP. This pubkey can accept any type of coin, please leave this in
           your config to help support NOMP development. */
        "22851477d63a085dbc2398c8430af1c09e7343f6": 0.1
    },

    "paymentProcessing": {
        "enabled": true,

        /* Every this many seconds get submitted blocks from redis, use daemon RPC to check
           their confirmation status, if confirmed then get shares from redis that contributed
           to block and send out payments. */
        "paymentInterval": 30,

        /* Minimum number of coins that a miner must earn before sending payment. Typically,
           a higher minimum means less transactions fees (you profit more) but miners see
           payments less frequently (they dislike). Opposite for a lower minimum payment. */
        "minimumPayment": 0.01,

        /* This daemon is used to send out payments. It MUST be for the daemon that owns the
           configured 'address' that receives the block rewards, otherwise the daemon will not
           be able to confirm blocks or send out payments. */
        "daemon": {
            "host": "127.0.0.1",
            "port": 19332,
            "user": "testuser",
            "password": "testpass"
        }
    },

    /* Each pool can have as many ports for your miners to connect to as you wish. Each port can
       be configured to use its own pool difficulty and variable difficulty settings. varDiff is
       optional and will only be used for the ports you configure it for. */
    "ports": {
        "3032": { //A port for your miners to connect to
            "diff": 32, //the pool difficulty for this port

            /* Variable difficulty is a feature that will automatically adjust difficulty for
               individual miners based on their hashrate in order to lower networking overhead */
            "varDiff": {
                "minDiff": 8, //Minimum difficulty
                "maxDiff": 512, //Network difficulty will be used if it is lower than this
                "targetTime": 15, //Try to get 1 share per this many seconds
                "retargetTime": 90, //Check to see if we should retarget every this many seconds
                "variancePercent": 30 //Allow time to very this % from target without retargeting
            }
        },
        "3256": { //Another port for your miners to connect to, this port does not use varDiff
            "diff": 256 //The pool difficulty
        }
    },

    /* More than one daemon instances can be setup in case one drops out-of-sync or dies. */
    "daemons": [
        {   //Main daemon instance
            "host": "127.0.0.1",
            "port": 19332,
            "user": "testuser",
            "password": "testpass"
        }
    ],

    /* This allows the pool to connect to the daemon as a node peer to receive block updates.
       It may be the most efficient way to get block updates (faster than polling, less
       intensive than blocknotify script). It requires the additional field "peerMagic" in
       the coin config. */
    "p2p": {
        "enabled": false,

        /* Host for daemon */
        "host": "127.0.0.1",

        /* Port configured for daemon (this is the actual peer port not RPC port) */
        "port": 19333,

        /* If your coin daemon is new enough (i.e. not a shitcoin) then it will support a p2p
           feature that prevents the daemon from spamming our peer node with unnecessary
           transaction data. Assume its supported but if you have problems try disabling it. */
        "disableTransactions": true
    },
    
    /* Enabled this mode and shares will be inserted into in a MySQL database. You may also want
       to use the "emitInvalidBlockHashes" option below if you require it. The config options
       "redis" and "paymentProcessing" will be ignored/unused if this is enabled. */
    "mposMode": {
        "enabled": false,
        "host": "127.0.0.1", //MySQL db host
        "port": 3306, //MySQL db port
        "user": "me", //MySQL db user
        "password": "mypass", //MySQL db password
        "database": "ltc", //MySQL db database name

        /* Checks for valid password in database when miners connect. */
        "checkPassword": true,

        /* Unregistered workers can automatically be registered (added to database) on stratum
           worker authentication if this is true. */
        "autoCreateWorker": false
    }
}

You can create as many of these pool config files as you want (such as one pool per coin you which to operate). If you are creating multiple pools, ensure that they have unique stratum ports.

For more information on these configuration options see the pool module documentation

[Optional, recommended] Setting up blocknotify
  1. In config.json set the port and password for blockNotifyListener
  2. In your daemon conf file set the blocknotify command to use:
node [path to cli.js] [coin name in config] [block hash symbol]

Example: inside dogecoin.conf add the line

blocknotify=node /home/nomp/scripts/cli.js blocknotify dogecoin %s

Alternatively, you can use a more efficient block notify script written in pure C. Build and usage instructions are commented in scripts/blocknotify.c.

3) Start the portal

node init.js
Optional enhancements for your awesome new mining pool server setup:
  • Use something like forever to keep the node script running in case the master process crashes.
  • Use something like redis-commander to have a nice GUI for exploring your redis database.
  • Use something like logrotator to rotate log output from NOMP.
  • Use New Relic to monitor your NOMP instance and server performance.

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-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.
  • Compare your config.json and pool_configs/coin.json configurations to the latest example ones in this repo or the ones in the setup instructions where each config field is explained. You may need to modify or add any new changes.

Donations

To support development of this project feel free to donate :)

  • BTC: 1KRotMnQpxu3sePQnsVLRy3EraRFYfJQFR
  • LTC: LKfavSDJmwiFdcgaP1bbu46hhyiWw5oFhE
  • VTC: VgW4uFTZcimMSvcnE4cwS3bjJ6P8bcTykN
  • MAX: mWexUXRCX5PWBmfh34p11wzS5WX2VWvTRT
  • QRK: QehPDAhzVQWPwDPQvmn7iT3PoFUGT7o8bC
  • DRK: XcQmhp8ANR7okWAuArcNFZ2bHSB81jpapQ
  • DOGE: DBGGVtwAAit1NPZpRm5Nz9VUFErcvVvHYW
  • Cryptsy Trade Key: 254ca13444be14937b36c44ba29160bd8f02ff76

Credits

License

Released under the GNU General Public License v2

http://www.gnu.org/licenses/gpl-2.0.html

node-open-mining-portal's People

Contributors

bitcoinland avatar bluecircle avatar btcdrak avatar damianblack avatar ddfault avatar elbandi avatar fastcoin-project avatar globaltoken avatar gruve-p avatar gxtx avatar hashunlimited avatar iangcarroll avatar iliaselmatani avatar jkoornneef avatar katxi avatar mculp avatar nicoschtein avatar nomp avatar ob1100 avatar ondalf avatar pcperfect avatar shaolinfry avatar sysmanalex avatar thenicholasnick avatar thrassos avatar tylerplongwell avatar vekexasia avatar whyyk7 avatar zacons avatar zone117x avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

node-open-mining-portal's Issues

LogLevel

Can we set log level in config ?
when I have X GHs login every share is waste of time for CPU ;)

MPOS displays incorrect quark shares!

Hello! with quark, MPOS has reported my last found blocks, the only one's I have found, with shares of 1, and shares of 0, even though tons more have been submitted!

This is at least a minor inconvenience, but should be fixed!

npm update problem

here is npm update output..

[email protected] node_modules/request/node_modules/hawk
├── [email protected]
├── [email protected]
├── [email protected]
└── [email protected]
npm http GET https://registry.npmjs.org/base58-native
npm http 304 https://registry.npmjs.org/base58-native
npm http GET https://registry.npmjs.org/bindings
[email protected] node_modules/mysql/node_modules/bignumber.js
npm http 304 https://registry.npmjs.org/bindings

[email protected] install /root/node-open-mining-portal-master/node_modules/stratum-pool/node_modules/multi-hashing
node-gyp rebuild

Traceback (most recent call last):
File "/usr/local/lib/node_modules/npm/node_modules/node-gyp/gyp/gyp_main.py", line 18, in
sys.exit(gyp.script_main())
AttributeError: 'module' object has no attribute 'script_main'
gyp ERR! configure error
gyp ERR! stack Error: gyp failed with exit code: 1
gyp ERR! stack at ChildProcess.onCpExit (/usr/local/lib/node_modules/npm/node_modules/node-gyp/lib/configure.js:337:16)
gyp ERR! stack at ChildProcess.EventEmitter.emit (events.js:98:17)
gyp ERR! stack at Process.ChildProcess._handle.onexit (child_process.js:797:12)
gyp ERR! System Linux 3.11.0-19-generic
gyp ERR! command "node" "/usr/local/lib/node_modules/npm/node_modules/node-gyp/bin/node-gyp.js" "rebuild"
gyp ERR! cwd /root/node-open-mining-portal-master/node_modules/stratum-pool/node_modules/multi-hashing
gyp ERR! node -v v0.10.26
gyp ERR! node-gyp -v v0.12.2
gyp ERR! not ok
npm ERR! [email protected] install: node-gyp rebuild
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the [email protected] install script.
npm ERR! This is most likely a problem with the multi-hashing package,
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node-gyp rebuild
npm ERR! You can get their info via:
npm ERR! npm owner ls multi-hashing
npm ERR! There is likely additional logging output above.

npm ERR! System Linux 3.11.0-19-generic
npm ERR! command "/usr/local/bin/node" "/usr/local/bin/npm" "update"
npm ERR! cwd /root/node-open-mining-portal-master
npm ERR! node -v v0.10.26
npm ERR! npm -v 1.4.3
npm ERR! code ELIFECYCLE
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /root/node-open-mining-portal-master/npm-debug.log
npm ERR! not ok code 0

[Feature Request] Round length statistics and invalid share stats over time

1)Also please modify it so that when it is writing the values to to the blocksPending table include :: - this will make generating good pool statistics possible.

  1. And lastly - can the new stats object please also start recording users invalid shares submitted please? Also essential for stats that are on par with MPOS.

There is somrthing wrong with X11 on difficuty 0.004

Please set the right difficuty 0.004 with darkcoin and hirocoin.
redisCommands.push(['hincrby', coin + '_shares:roundCurrent', shareData.worker, shareData.difficulty]);

is error。
Make
redisCommands.push(['hincrbyfloat', coin + '_shares:roundCurrent', shareData.worker, shareData.difficulty]);

And still have other bug like stat

Issue when running init.js

/root/node-open-mining-portal/node_modules/posix/lib/posix/index.js:21
throw "unable to load the node-posix extension module";
^
unable to load the node-posix extension module

payment processor failing

ReferenceError: t is not defined
at /root/NOMP/node-stratum-portal/libs/paymentProcessor.js:124:140
at Array.filter (native)
at /root/NOMP/node-stratum-portal/libs/paymentProcessor.js:122:43
at /root/NOMP/node-stratum-portal/node_modules/stratum-pool/lib/daemon.js:134:13
at IncomingMessage. (/root/NOMP/node-stratum-portal/node_modules/stratum-pool/lib/daemon.js:91:21)
at IncomingMessage.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:920:16
at process._tickCallback (node.js:415:13)

[Payments] [Jennycoin] Payments stopped because of the critical error - failed commands saved in Jennycoin_finalRedisCommands redis set:

http://pastebin.com/C1UnbFH7 http://i.imgur.com/EwAE8Hw.png

2014-04-10 15:48:03 [Payments] [Jennycoin] Payments stopped because of the critical error - failed commands saved in Jennycoin_finalRedisCommands redis set:
[["smove","Jennycoin_blocksPending","Jennycoin_blocksConfirmed","9d1b6944db0d82523f88d517cf3a2dfe3ed0dc73dcdfca603e34ac06a67ea505:5541bbc951cc88a24ec96aff3174dacce17f054e7104995557f8c03431afd3c4:6709:86753090000"],["hincrbyfloat","Jennycoin_payouts","JcPRZScB5Hx16t7ZkoU5EggFLFZWjVJMa4","867.53090000"],["del","Jennycoin_shares:round6709"],["hincrbyfloat","Jennycoin_stats","totalPaid","867.53090000"],["del","Jennycoin_finalRedisCommands"],["bgsave"]]

Make job re-broadcast a configurable interval

Ok so not sure what's going on here, bit i am having a major hard time running a blockerrupter cube on my pool here.

i have the cube pointed at a bfgminer proxy running on port 8332 thats redirected to the pool.

bfgminer seems to be accepting lots of shares from the pool, but when i look at my blockerrupter, its not actually doing anything ? of 471 jobs it accepted 2 and rejected 442 ? and none of the chips are working on anything ?

i switch over to a commercial pool such as bfgguild and it runs fine no problem.

i switch over to solo mining directly on the same box, using bfgminer connected directly to bitcoind and the block errupter cube fills up...

let me kmow what i can do to help debug here ?

memory leak

Yesterday I tested node-stratum-portal on production (abour 3ghs scrypt).
and after one hour all processes take more tan 1GB in RSS memory.
Something is not cleaning properly :/

Keccak hashrate

Hey,
I am really lame at using GitHub, so I can't provide pull request.

I'm trying your pool with one keccak coin (CryptoMETH), and it's doing great.
But hashrate in the website is waaay of.

The way to fix it, is editing node_modules/stratum-pool/lib/algoProperties.js and setting in keccak section: multiplier: Math.pow(2, 24)

Then the hashrates seem to be fine.

Thanks for amazing work with this pool!

Coin Switching

How exactly do you message the application to switch coins?

After coin switch, miners stop sending shares

As discussed in another issue, When coin switching is enabled using the proxy ports, The coins switch properly however, once a miner switches to the correct pool they no longer send any shares.

missing blocks

2014-03-27 03:57:59 [Payments] [Litecoin] error with requesting transaction from block daemon: {"result":null,"error":{"code":-5,"message":"Invalid or non-wallet transaction id"},"id":1395878279590}
2014-03-27 03:57:59 [Payments] [Litecoin] daemon did not give us back a transaction that we asked for: 04ad8b679e42c4af7817dc0456e32544d978fba7c1dc19667c60a0a363feeaa6

Also I can see that wallet balance somehow became smaller so it looks like blocks were "dropped" (?). Any idea why is this happening and shouldn't we clean _blocksPending in redis too?

Wrong RPC Password not caught

Doesn't seem to properly catch Invalid Authentication

# node init.js
2014-03-08 01:03:57 [system]:   [blocknotify] Blocknotify listener disabled
2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] Starting pool for Dogecoin [DOGE]
2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] Connecting to daemon(s)
2014-03-08 01:03:57 [mysql]:    [Dogecoin (Fork 0)] Successful connection to MySQL database
2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] could not parse rpc data from method: getinfo on instance 0 data: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>

2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] could not parse rpc data from method: validateaddress on instance 0 data: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>

2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] validateaddress rpc error on daemon instance 0, error +{}
2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] Could not start pool, "not all addresses are valid"
2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] could not parse rpc data from method: getmininginfo on instance 0 data: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>

2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] getmininginfo on init failed with daemon instance 0, error {}
2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] could not parse rpc data from method: submitblock on instance 0 data: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<HTML>
<HEAD>
<TITLE>Error</TITLE>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=ISO-8859-1'>
</HEAD>
<BODY><H1>401 Unauthorized.</H1></BODY>
</HTML>

2014-03-08 01:03:57 [system]:   [Dogecoin (Fork 0)] Could not detect block submission RPC method

NOMP not accepting shares when in x11 algos

There is some problems with NOMP when there is a coin with x11 algorythm..
Everything is good, before I start the client - there are no shares accepted on the client and on the stratum side.
With scrypt - everything's good!

Adding pool on the fly

Hi
Can I add pool on the fly?

When I need to add coin, the codes seems like whole stratum node needs to be restarted.
Affecting all other coins looks like problem to real productions.

Anyway.. what a awesome works!!! Really Great!!!

[feature request] proxy support for mining multiple coins simultaneously

is it possible to modify the proxy to support mining multiple coins simultaneously?
Use something to keep track of which worker is going to which daemon and then route the traffic appropriately?
With perhaps options in the config.json for the how to distribute the traffic? (ie, 50/50 for two coins or 25/25/50 between three coins for example)

Perhaps this should be related to the other feature request for pulling pool profitability data automatically.

Upstream Pool Connection

I noticed you intended on developing an upstream pool connection capability. I wanted to bring to your attention ProxyPool. It was developed specifically for p2pool, but works with most other pools as well when properly implemented. You may have seen it, the issue is that it is not in node.js. However, it tracks shares with redis. I would work on this myself, but I've not spent enough time with the your code yet to figure out how easy this would be and I'm by no means an expert with node.js but I thought I'd share it with you.

Typo in poolWorker.js

It should be data.difficulty at the line 126

logger.debug(logSystem, logComponent, logSubCat, 'Valid share diff of ' + data.difficultiy + ' submitted by worker ' + data.worker + ' [ ' + data.ip + ']' );

mpos compatibility mode needs db reconnection.

As I am running NOMP with mpos compatibility mode on Amazon RDS,
I could find that NOMP does not recover automatically from DB disconnect.

Amazon RDS may fail over to Multi-AZ sometimes and it takes about 2 minutes of disconnection.

There is connect() code for failure.
https://github.com/zone117x/node-open-mining-portal/blob/master/libs/mposCompatibility.js#L31

But when it fails to connect at that moment, it doesn't try to reconnect any more.
I think setTimeout() function needs to be placed.

i get a error

/root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/node_modules/bindings/bindings.js:91
throw err
^
Error: Could not locate the bindings file. Tried:
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/build/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/build/Debug/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/build/Release/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/out/Debug/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/Debug/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/out/Release/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/Release/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/build/default/scrypthash.node
→ /root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/compiled/0.10.24/linux/x64/scrypthash.node
at bindings (/root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/node_modules/bindings/bindings.js:88:9)
at Object. (/root/nomp/node_modules/stratum-pool/node_modules/scrypt256-hash/index.js:1:99)
at Module._compile (module.js:456:26)
at Object.Module._extensions..js (module.js:474:10)
at Module.load (module.js:356:32)
at Function.Module._load (module.js:312:12)
at Module.require (module.js:364:17)
at require (module.js:380:17)
at Object. (/root/nomp/node_modules/stratum-pool/lib/algoProperties.js:1:76)
at Module._compile (module.js:456:26)

help me

npm update

npm ERR! Error: failed to fetch from registry: stratum-pool/0.1.5
npm ERR! at /usr/share/npm/lib/utils/npm-registry-client/get.js:139:12
npm ERR! at cb (/usr/share/npm/lib/utils/npm-registry-client/request.js:31:9)
npm ERR! at Request._callback (/usr/share/npm/lib/utils/npm-registry-client/request.js:136:18)
npm ERR! at Request.callback (/usr/lib/nodejs/request/main.js:119:22)
npm ERR! at Request. (/usr/lib/nodejs/request/main.js:212:58)
npm ERR! at Request.emit (events.js:88:20)
npm ERR! at ClientRequest. (/usr/lib/nodejs/request/main.js:412:12)
npm ERR! at ClientRequest.emit (events.js:67:17)
npm ERR! at HTTPParser.onIncoming (http.js:1261:11)
npm ERR! at HTTPParser.onHeadersComplete (http.js:102:31)
npm ERR! You may report this log at:
npm ERR! http://bugs.debian.org/npm
npm ERR! or use
npm ERR! reportbug --attach /var/www/nomp/npm-debug.log npm
npm ERR!
npm ERR! System Linux 3.11.0-18-generic
npm ERR! command "node" "/usr/bin/npm" "update"
npm ERR! cwd /var/www/nomp
npm ERR! node -v v0.6.12
npm ERR! npm -v 1.1.4
npm ERR! message failed to fetch from registry: stratum-pool/0.1.5
npm ERR!
npm ERR! Additional logging details can be found in:
npm ERR! /var/www/nomp/npm-debug.log
npm not ok

[Feature Request] Retain Previous Round Share Stats

  1. Please add a line to the config.json that will enable or disable the deleting of the previous completed rounds histories in redis (in the _rounds keys. Personally I just have commented out those lines, but for compatibility it would be nice to be able to have a easy way to stop it from doing that.

time in output is wrong

2014-03-11 09:03:59 [system]:   [dogecoin (Fork 1)] Detected updated block transactions
2014-03-11 09:03:59 [client]:   [dogecoin (Fork 12)] Client 'xxxxx.xxxx' has sent us an unknown stratum method: mining.get_transactions
2014-03-11 09:03:59 [system]:   [dogecoin (Fork 1)] Detected updated block transactions
2014-03-11 09:03:00 [system]:   [dogecoin (Fork 11)] Detected updated block transactions
2014-03-11 09:03:00 [client]:   [dogecoin (Fork 27)] Client 'xxxxx.xxx' has sent us an unknown stratum method: mining.get_transactions
2014-03-11 09:03:00 [system]:   [dogecoin (Fork 9)] Detected updated block transactions

payments

after the new update the nomp doen't pays out at all doen't even shows the blocks.

"zadd" "statHistory" "1397836894" "{"time":1397836894,"global":{"workers":1,"hashrate":0},"algos":{"scrypt":{"workers":0,"hashrate":0,"hashrateString":"0.00 KH"},"scrypt-n":{"workers":0,"hashrate":0,"hashrateString":"0.00 KH"},"x11":{"workers":0,"hashrate":0,"hashrateString":"0.00 KH"},"sha256":{"workers":1,"hashrate":400863614,"hashrateString":"382.29 MH"}},"pools":{"Casinocoin":{"name":"Casinocoin","symbol":"CSC","algorithm":"scrypt","poolStats":{"validShares":"115"},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"Eoncoin":{"name":"Eoncoin","symbol":"EON","algorithm":"scrypt","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"ExeCoin":{"name":"ExeCoin","symbol":"EXE","algorithm":"scrypt-n","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"GhostCoin":{"name":"GhostCoin","symbol":"GHC","algorithm":"scrypt","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"Hirocoin":{"name":"Hirocoin","symbol":"HIC","algorithm":"x11","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"Limecoin":{"name":"Limecoin","symbol":"LIM","algorithm":"x11","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"Muniti":{"name":"Muniti","symbol":"MUN","algorithm":"x11","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"NyanCoin":{"name":"NyanCoin","symbol":"NYC","algorithm":"scrypt","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"Octocoin":{"name":"Octocoin","symbol":"888","algorithm":"scrypt","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"Reddcoin":{"name":"Reddcoin","symbol":"REDD","algorithm":"scrypt","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"SpeedCoin":{"name":"SpeedCoin","symbol":"SPC","algorithm":"sha256","poolStats":{"validShares":"2622","invalidShares":"52"},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{"STtkoQ4rFkDgnA9wKDQFT6M8gfs37rw8JD":60928},"hashrate":400863614,"workerCount":1,"hashrateString":"382.29 MH"},"Whitecoin":{"name":"Whitecoin","symbol":"WC","algorithm":"scrypt","poolStats":{"validShares":0,"validBlocks":0,"invalidShares":0},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"},"CoinoCoin":{"name":"CoinoCoin","symbol":"COC","algorithm":"scrypt","poolStats":{"validShares":"568","invalidShares":"8"},"blocks":{"pending":0,"confirmed":0,"orphaned":0},"workers":{},"hashrate":0,"workerCount":0,"hashrateString":"0.00 KH"}}}"

node init.js - error when launching

Having an error when launching NOMP for the first time. Have been extra careful trying to be excat with all instructions. Any insight all other pages on google with error 348 were not helpful. Thanks


buffer.js:348
ret = this.parent.hexWrite(string, this.offset + offset, length);
^
TypeError: Invalid hex string
at Buffer.write (buffer.js:348:25)
at new Buffer (buffer.js:215:28)
at new module.exports (/home/crypto/nomp/node_modules/stratum-pool/lib/peer.js:49:17)
at SetupPeer (/home/crypto/nomp/node_modules/stratum-pool/lib/pool.js:201:22)
at /home/crypto/nomp/node_modules/stratum-pool/lib/pool.js:67:25
at /home/crypto/nomp/node_modules/stratum-pool/lib/pool.js:103:13
at /home/crypto/nomp/node_modules/stratum-pool/lib/pool.js:664:21
at itemFinished (/home/crypto/nomp/node_modules/stratum-pool/lib/daemon.js:156:36)
at /home/crypto/nomp/node_modules/stratum-pool/lib/daemon.js:169:17
at IncomingMessage. (/home/crypto/nomp/node_modules/stratum-pool/lib/daemon.js:91:21)
2014-04-18 14:54:08 [Master] [PoolSpanwer] Fork 0 died, spawning replacement worker...
Litecoin ffff00000000000000000000000000000000000000000000000000000000

issues with get_transaction

I keep getting the following error, and then the fork crashes... not i am setting up a private (internal only) bitcoin mining pool to manage all my mining gear!)

(Fork 0) Client 'xxxxxxxxxxxxxxxxxxxxxx' has sent us an unknown stratum method: mining.get_transaction

then crashes with

/home/osaware/nomp/node_modules/stratum-pool/lib/algoProperties.js:12
return util.doublesha.apply(this, arguments);
^
ReferenceError: util is not defined
at global.algos.sha256.hash (/home/osaware/nomp/node_modules/stratum-pool/lib/algoProperties.js:12:20)
at JobManager.processShare (/home/osaware/nomp/node_modules/stratum-pool/lib/jobManager.js:176:28)
at null. (/home/osaware/nomp/node_modules/stratum-pool/lib/pool.js:554:46)
at EventEmitter.emit (events.js:98:17)
at handleSubmit (/home/osaware/nomp/node_modules/stratum-pool/lib/stratum.js:156:15)
at handleMessage (/home/osaware/nomp/node_modules/stratum-pool/lib/stratum.js:68:17)
at /home/osaware/nomp/node_modules/stratum-pool/lib/stratum.js:211:25
at Array.forEach (native)
at Socket. (/home/osaware/nomp/node_modules/stratum-pool/lib/stratum.js:198:26)
at Socket.EventEmitter.emit (events.js:95:17)

I found this thread online... it may help ? unless i am doing something wrong in my configs...

luke-jr/bfgminer#225

blocknotify.js errors

hey, whenever my blocknotify.js runs I get this coming up on the console:

events.js:72
throw er; // Unhandled 'error' event
^
Error: getaddrinfo ENOTFOUND
at errnoException (dns.js:37:11)
at Object.onanswer as oncomplete

redis

Either by my own incompetence or some weird error, my redis database was wiped after i re initiated nomp. but, un like last time -- all the stats initiated at 0 !

Does not reconnect to SQL after failure

I restarted my SQL server real quick with MPOS compatibility mode. Mining was still working but shares were not being credited and NOMP made no attemp to reconnect to SQL

Cluster of NOMPs?

First off, thank you for sharing your wonderful work! I plan to contribute back as I gain a better understanding of the project. I was wondering, is it possible to have a cluster of NOMPs? What would be the best way to do it? Should they share the same Redis/MySQL or is it better to set everything up as a separate pool?

tons of TIME_WAIT connections

hey, I am seeing tons (hundreds, like over 1000) of these connections between my local host and my coin daemons:
tcp 0 0 127.0.0.1:60131 127.0.0.1:7950 TIME_WAIT -
tcp 0 0 127.0.0.1:58612 127.0.0.1:7950 TIME_WAIT -
tcp 0 0 127.0.0.1:41226 127.0.0.1:9327 TIME_WAIT -
tcp 0 0 127.0.0.1:40559 127.0.0.1:9327 TIME_WAIT -
tcp 0 0 127.0.0.1:59283 127.0.0.1:7950 TIME_WAIT -
tcp 0 0 127.0.0.1:60095 127.0.0.1:7950 TIME_WAIT -
tcp 0 0 127.0.0.1:41034 127.0.0.1:9327 TIME_WAIT -
tcp 0 0 127.0.0.1:59012 127.0.0.1:7950 TIME_WAIT -
tcp 0 0 127.0.0.1:57760 127.0.0.1:9337 TIME_WAIT -
tcp 0 0 127.0.0.1:39601 127.0.0.1:9327 TIME_WAIT -
tcp 0 0 127.0.0.1:39621 127.0.0.1:9327 TIME_WAIT -
tcp 0 0 127.0.0.1:58534 127.0.0.1:7950 TIME_WAIT -

Any idea why the pool must be doing this? it happens for all the coin daemons I am running...

Threads not synchronizing diff on x11

The problem is that my diff is set to 0.005, vardiff at 0.005-0.100
I have potcoin and darkcoin on one stratum using NOMP, withouth telling NOMP, he spawned 2 threads for dark and 2 for potcoin, but when the time to change the diff on x11(darkcoin), one thread goes to 0.01, other stays on 0.005, both accepting and writing shares from same worker..

undefined

undefined:2
[pool].workers).length)+' '+(it.stats.pools[pool].poolStats.validShar
Help ?

config varDiff don't change anything

Hi
I try to change minDiff and poolDiff but always my miner start at 16 diff
evenretarget time don't do antyhing :/

EDIT:
hmm..

 pool difficulty was set higher than network difficulty of 0.80280034
lowering pool diff from 64 to 16

lol ?

about graphs

Hi again. An idea came to my mind as i work with nomp.

Wouldn't be a good idea to make a ghaph for earch scrypt (or at least split sha from scrypt?)

I am Telling this because sha gives ghashes and scypt khashes. so everytime someone changes the page he has to remouve all the sha coins to see the scypt hashrates..

that only. Have a nice kai peacefull morning

proxy errors?

Coinswitch listener has incoming connection
2014-04-10 08:10:02 [Master] [Coinswitch] Coinswitch listener received switch request

/node-open-mining-portal/libs/poolWorker.js:55

            var oldCoin = proxySwitch[algo].currentPool;
   /node-open-mining-portal/libs/poolWorker.js:55
                                    ^
            var oldCoin = proxySwitch[algo].currentPool;
                                 TypeError: Cannot read property 'currentPool' of undefined
at process.<anonymous> (/node-open-mining-portal/libs/poolWorker.js:55:48)
at process.EventEmitter.emit (events.js:117:20)
at handleMessage (child_process.js:318:10)
at Pipe.channel.onread (child_process.js:345:11)
      ^

/node-open-mining-portal/libs/poolWorker.js:55
var oldCoin = proxySwitch[algo].currentPool;
/node-open-mining-portal/libs/poolWorker.js:55
^
TypeError: Cannot read property 'currentPool' of undefined
at process. (/node-open-mining-portal/libs/poolWorker.js:55:48)
at process.EventEmitter.emit (events.js:117:20)
at handleMessage (child_process.js:318:10)
at Pipe.channel.onread (child_process.js:345:11)
var oldCoin = proxySwitch[algo].currentPool;
^
TypeError: Cannot read property 'currentPool' of undefined
at process. (/node-open-mining-portal/libs/poolWorker.js:55:48)
at process.EventEmitter.emit (events.js:117:20)
at handleMessage (child_process.js:318:10)
at Pipe.channel.onread (child_process.js:345:11)
TypeError: Cannot read property 'currentPool' of undefined
at process. (/node-open-mining-portal/libs/poolWorker.js:55:48)
at process.EventEmitter.emit (events.js:117:20)
at handleMessage (child_process.js:318:10)
at Pipe.channel.onread (child_process.js:345:11)

Connecting to upstream stratum server for work

Hi, love your work! You have a feature planned:

"To reduce variance for pools just starting out which have little to no hashing power a feature is planned which will allow your own pool to connect upstream to a larger pool server. It will request work from the larger pool then redistribute the work to our own connected miners."

Any idea on when this will happen ? Happy to donate towards this!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.