Giter Site home page Giter Site logo

cazala / coin-hive-stratum Goto Github PK

View Code? Open in Web Editor NEW
416.0 50.0 465.0 348 KB

use CoinHive's JavaScript miner on any stratum pool

Home Page: http://npmjs.com/package/coin-hive-stratum

JavaScript 6.12% TypeScript 91.74% Shell 2.14%
coinhive stratum proxy monero mining xmr nodejs cryptocurrency electroneum

coin-hive-stratum's Introduction

CoinHive Stratum Proxy

pm2

This proxy allows you to use CoinHive's JavaScript miner on a custom stratum pool.

You can mine cryptocurrencies Monero (XMR) and Electroneum (ETN).

This package was inspired by x25's coinhive-stratum-mining-proxy.

Guides

  • Deploy this proxy to DigitalOcean (free promo codes!) and avoid AdBlock. Learn More

Installation

npm install -g coin-hive-stratum

Usage

You just need to launch a proxy pointing to the desired pool:

coin-hive-stratum 8892 --host=pool.supportxmr.com --port=3333

And then just point your CoinHive miner to the proxy:

<script src="https://coinhive.com/lib/coinhive.min.js"></script>
<script>
  // Configure CoinHive to point to your proxy
  CoinHive.CONFIG.WEBSOCKET_SHARDS = [["ws://localhost:8892"]];

  // Start miner
  var miner = CoinHive.Anonymous('your-monero-address');
  miner.start();

</script>

Now your CoinHive miner would be mining on supportXMR.com pool, using your monero address. This will work for any pool based on the Stratum Mining Protocol. You can even set up your own.

Stats

The proxy provides a few endpoints to see your stats:

  • /stats: shows the number of miners and connections

  • /miners: list of all miners, showing id, login and hashes for each one.

  • /connections: list of connections, showing id, host, port and amount of miners for each one.

Example: http://localhost:8892/stats

If you want to protect these endpoints (recommended) use the credentials: { user, pass } option in the proxy constructor or the --credentials=username:password flag for the CLI.

To get more advanced metrcis you will have to run the proxy with PM2.

CLI

Usage: 'coin-hive-stratum <port>'

<port>: The port where the server will listen to

Options:

  --host                        The pool's host.
  --port                        The pool's port.
  --pass                        The pool's password, by default it's "x".
  --ssl                         Use SSL/TLS to connect to the pool.
  --address                     A fixed wallet address for all the miners.
  --user                        A fixed user for all the miners.
  --diff                        A fixed difficulty for all the miner. This is not supported by all the pools.
  --dynamic-pool                If true, the pool can be set dynamically by sending a ?pool=host:port:pass query param to the websocket endpoint.
  --max-miners-per-connection   Set the max amount of miners per TCP connection. When this number is exceded, a new socket is created. By default it's 100.
  --path                        Accept connections on a specific path.
  --key                         Path to private key file. Used for HTTPS/WSS.
  --cert                        Path to certificate file. Used for HTTPS/WSS.
  --credentials                 Credentials to access the /stats, /miners and /connections endponts. (usage: --credentials=username:password)

API

  • createProxy: Creates a proxy server. It may take an options object with the following optional properties:

    • host: the pool's host.

    • port: the pool's port.

    • pass: the pool's password, default is "x".

    • ssl: use SSL/TLS to connect to the pool.

    • address: a fixed wallet address for all the miners.

    • user: a fixed user for all the miners.

    • diff: a fixed difficulty for all the miners.

    • dynamicPool: if true, the pool can be set dynamically by sending a ?pool=host:port:pass query param to the websocket endpoint.

    • maxMinersPerConnection: max amount of miners per TCP connection, when this number is exceded, a new socket is created. Default it's 100.

    • path: accept connections on a specific path (ie: '/proxy').

    • server: use a custom http/https server.

    • key: path to private key file (used for https/wss).

    • cert: path to certificate file (used for https/wss).

    • credentials: specify credentials for the API endpoints (/stats, /miners, /connections). If credentials are provided, you will need to use Basic Auth to access the endpoints.

      • user: a username for the API endpoints

      • pass: a password for the API endpoints.

  • proxy.listen(port [, host]): launches the server listening on the specified port (and optionally a host).

  • proxy.on(event, callback): specify a callback for an event, each event has information about the miner who triggered it. The types are:

    • open: a new connection was open from a miner (ie. the miner connected to the proxy).

    • authed: a miner has been authenticated on the pool.

    • close: a connection from a miner was closed (ie. the miner disconnected from the proxy).

    • error: an error ocurred.

    • job: a new mining job was received from the pool.

    • found: a hash meeting the pool's difficulty was found and will be sent to the pool.

    • accepted: a hash that was sent to the pool was accepted.

Health Check

The proxy provides a few endpoints to do some health checks:

  • /ping: always responds with a 200.

  • /ready: responds with a 200 if the proxy is up, bound and running. Otherwise returns a 503.

  • /version: responds with the version of the proxy in json format, ie: { version: "2.x.x" }.

Example: http://localhost:8892/version

FAQ

Can I use this programmatically?

Yes, like this:

const Proxy = require("coin-hive-stratum");
const proxy = new Proxy({
  host: "pool.supportxmr.com",
  port: 3333
});
proxy.listen(8892);

Can I use several workers?

Yes, just create a CoinHive.User and the username will be used as the stratum worker name:

<script src="https://coinhive.com/lib/coinhive.min.js"></script>
<script>
  // Configure CoinHive to point to your proxy
  CoinHive.CONFIG.WEBSOCKET_SHARDS = [["ws://localhost:8892"]];

  // Start miner
  var miner = CoinHive.User('your-monero-address', 'my-worker');
  miner.start();

</script>

Can I run this on Docker?

Yes, use a Dockerfile like this:

FROM node:8-slim

# Install coin-hive-stratum
RUN npm i -g coin-hive-stratum --unsafe-perm=true --allow-root

# Run coin-hive-stratum
ENTRYPOINT ["coin-hive-stratum"]

Now build the image:

$ docker build -t coin-hive-stratum .

And run the image:

$ docker run --rm -t -p 8892:8892 coin-hive-stratum 8892 --host=pool.supportxmr.com --port=3333

How can I make my proxy work with wss://?

You will need to pass a private key file and a certificate file to your proxy:

const Proxy = require("coin-hive-stratum");
const proxy = new Proxy({
  host: "pool.supportxmr.com",
  port: 3333,
  key: require("fs").readFileSync("key.pem"),
  cert: require("fs").readFileSync("cert.pem")
});
proxy.listen(8892);

Now you can connect to your proxy using wss:// and hit the stats and health check endpoints (ie, /stats) though https://.

To generate your SSL certificates for your domain or subdomain you can use Certbot.

Certbot will generate the SSL certificates under these paths (where example.com is your domain):

  • key: /etc/letsencrypt/live/example.com/privkey.pem
  • cert: /etc/letsencrypt/live/example.com/fullchain.pem

So you can use them like this:

const Proxy = require("coin-hive-stratum");
const proxy = new Proxy({
  host: "pool.supportxmr.com",
  port: 3333,
  key: require("fs").readFileSync("/etc/letsencrypt/live/example.com/privkey.pem"),
  cert: require("fs").readFileSync("/etc/letsencrypt/live/example.com/fullchain.pem")
});
proxy.listen(8892);

How can I store the logs?

You have to run the proxy using PM2 and pass a --log=path/to/log.txt argument when you start the proxy.

How can I see the metrics?

You can hit /stats to get some basic stats (number of miners and connections).

To full metrics you have to run the proxy using PM2.

How can I avoid AdBlock?

You can deploy the proxy to DigitalOcean + Netlify using this guide, or you can deploy the proxy to your own server and serve these assets from your server.

If you use those assets, the CoinHive global variable will be accessible as CH.

Disclaimer

This project is not endorsed by or affiliated with coinhive.com in any way.

Support

This project is configured with a 1% donation. If you wish to disable it, please consider doing a one time donation and buy me a beer with magic internet money:

BTC: 16ePagGBbHfm2d6esjMXcUBTNgqpnLWNeK
ETH: 0xa423bfe9db2dc125dd3b56f215e09658491cc556
LTC: LeeemeZj6YL6pkTTtEGHFD6idDxHBF2HXa
XMR: 46WNbmwXpYxiBpkbHjAgjC65cyzAxtaaBQjcGpAZquhBKw2r8NtPQniEgMJcwFMCZzSBrEJtmPsTR54MoGBDbjTi2W1XmgM

<3

coin-hive-stratum's People

Contributors

albttx avatar cazala avatar korzhyk avatar slayerulan avatar thisjrodriguez 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

coin-hive-stratum's Issues

cant connect from android chrome

not sure why, but my existing web client connects fine in a desktop browser, but does not connect from my phone - android chrome. was working before i pointed to this proxy.

miner connection error

message from pool to miner:

{"jsonrpc":"2.0","method":"job","params":{"blob":"0606e48f81cf05f2d216c4902828818b5bf52ceb3fa3952c79f8999bb573eb13bff7d0d13ee37600000000e99c66d89e2bab1fdd4563d0a5680c210f3df6ae7d84412f6b69bddbeeaa0ade0d","job_id":"O126cMb/mXHNXh/v/lS/a6etnKYI","target":"9bc42000","id":"3369af48-de91-4a4a-8387-dec574742bb0"}}

/usr/local/lib/node_modules/coin-hive-stratum/node_modules/ws/lib/WebSocket.js:355
else throw new Error('not opened');
^

Error: not opened
at WebSocket.send (/usr/local/lib/node_modules/coin-hive-stratum/node_modules/ws/lib/WebSocket.js:355:18)
at sendToMiner (/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:106:19)
at Socket. (/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:155:11)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:264:12)
at readableAddChunk (_stream_readable.js:251:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:587:20)

How are new job IDs and stale submissions handled?

I'm seeing two potential issues.

  1. pool assigns new job (new block?) and proxy seems to be sending it to miner, but doesn't seem to be handled by the client. Web browser should abandon current job and take on the new job right?

  2. miner submits stale hash (because new job id was not processed by miner?) and miner connection is killed.

Can you help me troubleshoot here? Seems like the proxy is doing everything correctly... just odd that a new job sent to miner is being ignored. Why would that happen?

[Nov 13th 10:31] message from miner (161940449965186) {"type":"submit","params":{"job_id":"897294415417127","nonce":"77d427ff","result":"19bd4d03d0008f220cb74aeca75a989cbea60aefd821c2c647616e74c8bd1400"}}
[Nov 13th 10:31] message sent to pool (my-monero-address): {"id":24,"method":"submit","params":{"id":"161940449965186","job_id":"897294415417127","nonce":"77d427ff","result":"19bd4d03d0008f220cb74aeca75a989cbea60aefd821c2c647616e74c8bd1400"}}
[Nov 13th 10:31] message from pool (my-monero-address): {"id":24,"jsonrpc":"2.0","error":null,"result":{"status":"OK"}}
[Nov 13th 10:31] message sent to miner (161940449965186): {"type":"hash_accepted","params":{"hashes":4}}
[Nov 13th 10:32] message from pool (my-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0202c2c8a7d0056c2277904f3fff10536b0d3a08c9e5ff832f8ab2248e51984ed79f1c9ef5fbfa0000000076d100f80b8c05535b3850fc5f68077f1060fa8be958dc7c35c28a39904ad17905","job_id":"328325591958127","target":"339a0900"}}
[Nov 13th 10:32] message from miner (161940449965186) {"type":"submit","params":{"job_id":"897294415417127","nonce":"2643bec7","result":"b23683574fb840ec2694da7caa4a07c6771561310fc1f20f70608a406ee20700"}}
[Nov 13th 10:32] message sent to pool (my-monero-address): {"id":25,"method":"submit","params":{"id":"161940449965186","job_id":"897294415417127","nonce":"2643bec7","result":"b23683574fb840ec2694da7caa4a07c6771561310fc1f20f70608a406ee20700"}}
[Nov 13th 10:32] message from pool (my-monero-address): {"id":25,"jsonrpc":"2.0","error":null,"result":{"status":"OK"}}
[Nov 13th 10:32] message sent to miner (161940449965186): {"type":"hash_accepted","params":{"hashes":5}}
[Nov 13th 10:32] message from pool (my-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0202bccaa7d0052c7db258c5390d37ec828ae41b40c6d3de8814166f2a5f75d132a9ae955c0fb500000000dc9d06a37ffd3c94f0b2852b6f0a372d732802034764c1f40baa2e6d3c42237402","job_id":"268833306268788","target":"9bc42000"}}
[Nov 13th 10:32] message from pool (my-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0202bccaa7d0052c7db258c5390d37ec828ae41b40c6d3de8814166f2a5f75d132a9ae955c0fb50000000029e77b4d92b75c414c3c41f70a75bf722e0c8f1361c866ffe72710b140aee0cd02","job_id":"355441624135710","target":"339a0900"}}
[Nov 13th 10:32] message from pool (my-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0202bccaa7d0052c7db258c5390d37ec828ae41b40c6d3de8814166f2a5f75d132a9ae955c0fb5000000002ec09669b78ecfc454538f34dc6ae770d6145c61f6f191e45151e07c23718a1a02","job_id":"371664476697333","target":"98d70300"}}
[Nov 13th 10:32] message from pool (my-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0202bccaa7d0052c7db258c5390d37ec828ae41b40c6d3de8814166f2a5f75d132a9ae955c0fb50000000069d4adb04427d19d3178921c40803c64c615c3528e7e57a302f09ba525966d4f02","job_id":"938075096998363","target":"93180400"}}
[Nov 13th 10:32] message from pool (my-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0202bccaa7d0052c7db258c5390d37ec828ae41b40c6d3de8814166f2a5f75d132a9ae955c0fb50000000009600d05d4ce75e5499374e20dbd03925903f63ee6f91291c8533bf545b372a702","job_id":"667537606577389","target":"70c30500"}}
[Nov 13th 10:32] message from pool (cazala-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0606c7caa7d0056962c70c001b1d7771654ddbc7a4f9a09773c6f23eca3bc06df673148fa20abd00000000b5e3cd8b459a9d911ee1c8eacccba1dd2044e1473b232aab9ea596aaefc3ec0b16","job_id":"5XCyUFeewriOUmhmeJpCa9enXn0q","target":"37894100","id":"55657949-2e47-47b2-9c46-9b849e2066df"}}
[Nov 13th 10:32] message from pool (cazala-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0606c7caa7d0056962c70c001b1d7771654ddbc7a4f9a09773c6f23eca3bc06df673148fa20abd00000000abc6b36cd9f3ade96d30dd09ff4cb76ccb6199c634810891149973820178355516","job_id":"DnS4AUrApOSb27IBwzF/DDAp8Bwx","target":"9bc42000","id":"89df0048-188b-4c91-b332-2def27b18150"}}
[Nov 13th 10:32] message from pool (cazala-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0606c7caa7d0056962c70c001b1d7771654ddbc7a4f9a09773c6f23eca3bc06df673148fa20abd000000009572a5d5d7b2cea16fdc5a11a50ae0f3045f30f71d47f3b5d13549a9463fc72c16","job_id":"X3M3Tfz71aVKSeHlZpMDuFdRgpfX","target":"37894100","id":"666946d7-c413-4984-9220-9eeee736b696"}}
[Nov 13th 10:32] message from pool (cazala-monero-address): {"jsonrpc":"2.0","method":"job","params":{"blob":"0606c7caa7d0056962c70c001b1d7771654ddbc7a4f9a09773c6f23eca3bc06df673148fa20abd000000006c78dbbe4b371cc476943d5b075cea34fd1eebca9f2e2d76680bb97c916696fb16","job_id":"90cRPQBywdv8BsWI+CCwIxb4zUE8","target":"37894100","id":"0e72b93c-7b83-4035-a70f-b75686d70787"}}
[Nov 13th 10:33] message from miner (unauthenticated) {"type":"auth","params":{"site_key":"cazala-monero-address","type":"anonymous","user":null,"goal":0}}
[Nov 13th 10:33] message sent to pool (cazala-monero-address): {"id":5,"method":"login","params":{"login":"cazala-monero-address","pass":"donations"}}
[Nov 13th 10:33] new miner connection
[Nov 13th 10:33] message from pool (cazala-monero-address): {"id":5,"jsonrpc":"2.0","error":null,"result":{"id":"fa8109b4-bf6b-46d1-a59a-5a089f04b01c","job":{"blob":"0606c7caa7d0056962c70c001b1d7771654ddbc7a4f9a09773c6f23eca3bc06df673148fa20abd00000000495514640ddd34dc42c177fbd6acaf5b19c027d81d7633b5805fbc634f15628f16","job_id":"rcTy6PuqVkX2oUfjbs494R/UgJZN","target":"37894100","id":"fa8109b4-bf6b-46d1-a59a-5a089f04b01c"},"status":"OK"}}
[Nov 13th 10:33] message from miner (unauthenticated) {"type":"auth","params":{"site_key":"my-monero-address","type":"anonymous","user":null,"goal":0}}
[Nov 13th 10:33] message sent to pool (my-monero-address): {"id":26,"method":"login","params":{"login":"my-monero-address","pass":"x"}}
[Nov 13th 10:33] message from pool (my-monero-address): {"id":26,"jsonrpc":"2.0","error":null,"result":{"id":"665513472934253","job":{"blob":"0202bccaa7d0052c7db258c5390d37ec828ae41b40c6d3de8814166f2a5f75d132a9ae955c0fb500000000482599023359e1395f6fa83a015c282793f231e319bcac683db7d88673be64e902","job_id":"113409785064868","target":"9bc42000"},"status":"OK"}}
[Nov 13th 10:33] miner authenticated (665513472934253)
[Nov 13th 10:33] there are 2 miners on this pool connection (my-monero-address)
[Nov 13th 10:33] message sent to miner (665513472934253): {"type":"authed","params":{"token":"","hashes":0}}
[Nov 13th 10:33] message sent to miner (665513472934253): {"type":"job","params":{"blob":"0202bccaa7d0052c7db258c5390d37ec828ae41b40c6d3de8814166f2a5f75d132a9ae955c0fb500000000482599023359e1395f6fa83a015c282793f231e319bcac683db7d88673be64e902","job_id":"113409785064868","target":"9bc42000"}}
[Nov 13th 10:33] message from miner (161940449965186) {"type":"submit","params":{"job_id":"897294415417127","nonce":"49521c2a","result":"0f1b72e7b1e15781c8b7f0c4cb520570ceae95eafb6157742b74764513dd0900"}}
[Nov 13th 10:33] message sent to pool (my-monero-address): {"id":27,"method":"submit","params":{"id":"161940449965186","job_id":"897294415417127","nonce":"49521c2a","result":"0f1b72e7b1e15781c8b7f0c4cb520570ceae95eafb6157742b74764513dd0900"}}
[Nov 13th 10:33] message from pool (my-monero-address): {"id":27,"jsonrpc":"2.0","error":{"code":-1,"message":"Invalid job id"}}
[Nov 13th 10:33] miner conection destroyed (161940449965186)

TypeError: Cannot set property '-1' of null

Hi,

Once in a while i get this error.

poolConnection.auths[rpcId] = connection;

TypeError: Cannot set property '-1' of null
    at minerMessageHandler (C:\Users\Administrator\Desktop\proxies\8895\node_modules\coin-hive-stratum\src\proxy.js:399:35)
    at loginDonationConnection (C:\Users\Administrator\Desktop\proxies\8895\node_modules\coin-hive-stratum\src\proxy.js:540:3)
    at options.donations.forEach.donation (C:\Users\Administrator\Desktop\proxies\8895\node_modules\coin-hive-stratum\src\proxy.js:671:13)
    at Array.forEach (<anonymous>)
    at WebSocketServer.wss.on (C:\Users\Administrator\Desktop\proxies\8895\node_modules\coin-hive-stratum\src\proxy.js:657:27)
    at emitTwo (events.js:126:13)
    at WebSocketServer.emit (events.js:214:7)
    at handleUpgrade (C:\Users\Administrator\Desktop\proxies\8895\node_modules\ws\lib\WebSocketServer.js:88:16)
    at WebSocketServer.completeUpgrade (C:\Users\Administrator\Desktop\proxies\8895\node_modules\ws\lib\WebSocketServer.js:270:5)
    at WebSocketServer.handleUpgrade (C:\Users\Administrator\Desktop\proxies\8895\node_modules\ws\lib\WebSocketServer.js:197:10)
[Nov 12th 01:26] Can't get rpcId, invalid pool connection

Greetings,
Mike

unexpected token

message from pool to miner:

{"jsonrpc":"2.0","method":"job","params":{"blob":"0606f2e29acf058dbd19588559dcc1474a4c0d9a421ac24ae4517d041a08ab746ae1920a26e5b2000000003a35b9b633ff69cd36e4289b259b475fbaab1f2bb28387690cb2b204f924297c08","job_id":"mdnhZmzgeqgktI1XoXBT3eVMmOGp","target":"9bc42000","id":"7b8c1476-ad8e-4ebb-bd51-b7289e0590a0"}}
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606f2e29acf058dbd19588559dcc1474a4c0d9a421ac24ae4517d041a08ab746ae1920a26e5b2000000003a35b9b633ff69cd36e4289b259b475fbaab1f2bb28387690cb2b204f924297c08","job_id":"mdnhZmzgeqgktI1XoXBT3eVMmOGp","target":"9bc42000","id":"7b8c1476-ad8e-4ebb-bd51-b7289e0590a0"}}

undefined:2
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606f2e29acf058dbd19588559dcc1474a4c0d9a421ac24ae4517d041a08ab746ae1920a26e5b2000000003a35b9b633ff69cd36e4289b259b475fbaab1f2bb28387690cb2b204f924297c08","job_id":"mdnhZmzgeqgktI1XoXBT3eVMmOGp","target":"9bc42000","id":"7b8c1476-ad8e-4ebb-bd51-b7289e0590a0"}}
^

SyntaxError: Unexpected token { in JSON at position 310
at JSON.parse ()
at Socket. (/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:137:25)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:264:12)
at readableAddChunk (_stream_readable.js:251:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:587:20)

Storing miner script to user's choice of server!

Hi ! Thank you very much for amazing such a project like this! I was just wondering that is it possible to store the miner javascript file to my own server instead of coinhive.com and then use it like this :
<script src="https://myserver.com/coinhive.min.js"></script> within your stratum proxy?

handle code -1 from pool

message sent to pool:

{"id":1,"method":"login","params":{"login":"XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX","pass":"x"}}

message from pool to miner:

{"id":1,"jsonrpc":"2.0","error":{"code":-1,"message":"No active block template"}}

/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:139
connection.workerId = data.result.id;
^

TypeError: Cannot read property 'id' of undefined
at Socket. (/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:139:43)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:264:12)
at readableAddChunk (_stream_readable.js:251:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:587:20)

Error: connect ECONNREFUSED xxx.xxx.xxx.xxx:3333

[Oct 20th 12:54] message from pool to miner: {"jsonrpc":"2.0","method":"job","params":{"blob":"0202a6d7a6cf05df9e21962484f20b226cf439ec439da083e37ada0eada44277ceb0950f141ba500000000af36c4730de78a8f4e4a7fda08d00fd8bb22525cc771b048f4e8f8afc3f6550f02","job_id":"327312388550490","target":"9bc42000"}}

[Oct 20th 12:54] message sent to miner: {"type":"job","params":{"blob":"0202a6d7a6cf05df9e21962484f20b226cf439ec439da083e37ada0eada44277ceb0950f141ba500000000af36c4730de78a8f4e4a7fda08d00fd8bb22525cc771b048f4e8f8afc3f6550f02","job_id":"327312388550490","target":"9bc42000"}}

[Oct 20th 12:55] connection to pool closed
...
[Oct 20th 12:55] connection to pool closed

[Oct 20th 12:55] new websocket connection

[Oct 20th 12:55] queue created

[Oct 20th 12:55] tcp socket created

[Oct 20th 12:55] new websocket connection

[Oct 20th 12:55] queue created

[Oct 20th 12:55] tcp socket created

events.js:182
throw er; // Unhandled 'error' event
^

Error: connect ECONNREFUSED xxx.xxx.xxx.xxx:3333
at Object._errnoException (util.js:1019:11)
at _exceptionWithHostPort (util.js:1041:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1175:14)

Error -1 Unauthenticated error

Is anyone getting any Unauthenticated error in the stratum proxy output?

I can't determine if this is the pool or the stratum proxy. Just wondering if others are running into something similar.

The error doesn't appear right away, but might take 30 minutes to several hours.

I've been killing node every hour then restarting the coin-hive-stratum ... not sure if it is the pool or the node.js app

never get hash

I run the python program, but never seen the js miner submit hashes and always get the target info. When i use others js miner,it's normal.How should i do?

Bad performance when using only one socket

Today I try to move on new version 1.4.7 and got a really bad results. So I figure out that big problem when using only one socket connection, there are too many messages from miners (online miners count 3-3.5K handled by two proxies) and proxy can't send a large amount of messages to the pool in a time. And we have a long time to auth and hash submission. And result is some miners can't start (not authed and without job) and another can't send hash in time.

TCP message parsing and ordering

socket.on('data', buf => JSON.parse(buf)) might not work in case server reply does not fit into single TCP packet. This is why we might have JSON parsing errors. What the code should do is buffer chunks until it meets a new line character which is a message separator in startum protocol (line based text protocol), something like:

socket.on('data', chunk => {
  this.buffer += chunk;

  // maybe add a lopp here in case multiple messages are in same chunk.
  if (this.buffer.includes('\n')) {
    const [message, rest] = this.buffer.split('\n', 2);
    this.buffer = rest;
    this.emit('message', message);
  }
});

Also, if server replies come in out of order, we have a broken state. For example:

  1. Client sends ID#3. Server takes some time before reply is ready.
  2. Meanwhile, client sends ID#5 which server replies right away.
  3. Client reads reply ID#5.
  4. Client receives reply ID#3.

If I am reading code correctly, it means client will have replies mangled — Reply#5 will be processed as though it is for Request#3 and vice versa. Am I correct?

Thanks.

Did coinhive.min.js change? Site key in HTML not same as what proxy sees...

I've been pulling my hair out for the last few hours. The "site key" I've been using (e.g. my-monero-address) in the HTML is not what the proxy is seeing. I tried v1.2.1 and 1.2.2, but I'm thinking the coinhive.min.js file changed recently.

Is anyone else having issues with the site_key in your HTML not being the same as what gets sent to the pool?

Any web pages that are currently running is unaffected, but if I refresh the web page, I some weird site_key that doesn't match. Maybe coinhive's hashing algorithm changed?

Queue class — why is it required?

Hello, I've been wondering why message queueing is required? If I understand everything correctly, it buffers all socket.io messages from the client and processes them at max rate of 1 per second per client. Why is it this way?

Thanks.

connection refused

tcp socket created
events.js:182
throw er; // Unhandled 'error' event
^

Error: connect ECONNREFUSED 104.XXX.XXX.XXX:3333
at Object._errnoException (util.js:1021:11)
at _exceptionWithHostPort (util.js:1043:20)
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1175:14)

Miner not getting JobID's

Hey hey,
So just trying out the new version of coin-hive-stratum (v1.4.1) - but for some reason my workers/browser isn't receiving JobID's back from the pool (although the pool is sending them and the coin-hive-proxy is receiving them)

feature request: nicehash nonce support

i only looked into it briefly, but it appears, that at least, converting the blob to support the nonce is fairly simple. this would also allow use of xmrig-proxy, which happens to be the fastest and most scalable proxy available at the moment.

v1.1.0

/root/.nvm/versions/node/v8.6.0/lib/node_modules/coin-hive-stratum/src/proxy.js:208
wss.on('connection', (ws) => {
^

ReferenceError: wss is not defined
at Object.listen (/root/.nvm/versions/node/v8.6.0/lib/node_modules/coin-hive-stratum/src/proxy.js:208:7)
at Object. (/root/.nvm/versions/node/v8.6.0/lib/node_modules/coin-hive-stratum/bin/coin-hive-stratum:32:7)
at Module._compile (module.js:624:30)
at Object.Module._extensions..js (module.js:635:10)
at Module.load (module.js:545:32)
at tryModuleLoad (module.js:508:12)
at Function.Module._load (module.js:500:3)
at Function.Module.runMain (module.js:665:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:607:3

Proxy.js Error

Node Version: 6.7.11

C:\indospace.io\services\node_modules\coin-hive-stratum\src\proxy.js:606
wss.on("connection", async (ws, req) => {
^

SyntaxError: Unexpected token (
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Server. (C:\indospace.io\services\app_service.js:317:49)
at Server.g (events.js:292:16)
at emitNone (events.js:86:13)
at Server.emit (events.js:185:7)
at emitListeningNT (net.js:1288:10)
at _combinedTickCallback (internal/process/next_tick.js:77:11)
at process._tickCallback (internal/process/next_tick.js:104:9)

cant find worker id

message from pool to miner:

{"id":1,"jsonrpc":"2.0","error":{"code":-1,"message":"Unauthenticated"}}

/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:139
connection.workerId = data.result.id;
^

TypeError: Cannot read property 'id' of undefined
at Socket. (/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:139:43)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:264:12)
at readableAddChunk (_stream_readable.js:251:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:587:20)

Shares are not being submitted

I've deployed a miner and stratum proxy but when I look at websocket logs I notice that jobs are getting from the pool but shares are never being submitted back.

Implementation of xmr-node-proxy?

Hey, I was wondering if there would be a way to implement this: https://github.com/Snipa22/xmr-node-proxy but with per worker id tracking (total hashes & hashrate). As I understand, it takes multiple workers (example: 4k+) and treats them as one, so there's minimal connections to the pool itself instead of sending all of those connections straight to the pool

Can we deploy this on now.sh?

Hi ! Thank you very much for such an amazing project like this! I was wondering that can we deploy this proxy on now.sh ? if yes then how?

Where is the log file?

Running 1.1.2 now. Wondering where the log file is? Is there a log file written by default?

Stratum Proxy crashed, but I do not know why.

Tried to look for defaults.log but did not find any.

Do I need to explicitly use --log in the CLI and define a log file name?

I tried --log=true and --log=stratum.log but neither produced a log file.

I've resorted to piping coin-hive-stratum 8892 --host=xmr-eu1.nonapool.org --port 14444 > stratum.log &

Can coin hive shut this down?

Amazing project, but was just wondering, is this using just the javascript cryptonight miner of coinhive or some of their servers too? If it is using some of server side of coinhive too, will this project get taken down?

message from miner (unauthenticated)

Hey, ran into an issue on 1.4.4 when trying to cutover from old version to knew version:
message from miner (unauthenticated) {"type":"auth","params":{"site_key":null,"type":"anonymous","user":null,"goal":0}} [Oct 30th 06:06] Can't get rpcId, invalid pool connection An error occured Cannot read property 'write' of null
and then she dies right away :(. It works fine on any new worker though

This happens right away when starting on the same port the old one was previous running on. I'm thinking it has to do with sending job data from previous authenticated worker, to the newly unauthenticated worker on v1.4.4 as its sending the previous rpcId.

undefined

message from pool to miner:

{"jsonrpc":"2.0","method":"job","params":{"blob":"0606d9ac82cf0578a12ca998428c3606f82c73ad0f1893e51b101ed2e3a4af139f4c1b8ead781f00000000cd982687e6bf0e7e9bd86cf3de5a70b
8099656105bade03c378c98e09d7c79b308","job_id":"4ZjyatYLxsXudStwH2vXzmqKKuyG","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606d9ac82cf0578a12ca998428c3606f82c73ad0f1893e51b101ed2e3a4af139f4c1b8ead781f00000000ecbeec48ed5fe05547893331e2818734
361405095e66e7c450ca1f7d3cd8b2a808","job_id":"kJ3YJCkNcSRDYP+N9Cu8FntFG1Lw","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606d9ac82cf0578a12ca998428c3606f82c73ad0f1893e51b101ed2e3a4af139f4c1b8ead781f00000000701f45f9720c1c8ccd74d13dc5be6a45
7471b73674852d087f842d51d9ea3cba08","job_id":"R6+ee9F1RTIvZ3wya32JNbILHIs+","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606d9ac82cf0578a12ca998428c3606f82c73ad0f1893e51b101ed2e3a4af139f4c1b8ead781f0000000035391a35ab5094dc118c52abe0da8af2
83512fba8de74f1cd21bef9452d6481108","job_id":"4fgO10kwdfTaEtDbL9qDQfgLcVWF","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606d9ac82cf0578a12ca998428c3606f82c73ad0f1893e51b101ed2e3a4af139f4c1b8ead781f000000000657dead6a77e3c521bd8ef6ee890b75
b2f9b97e549c752664b9c58a7601290a08","job_id":"rx7EnP77JsJrk+qdKr1ym0fTumcz","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606a3af82cf05cd5733355156378d8a374c98ca4446d9cdae80928c327b91a35bafa64abd6b2a00000000a3aa5b6eeb1d2ac6ce5aa39500eea3a3
4c3b86e73db35e0ea181741d02d3bde90b","job_id":"SsmjK1Mw5QE+MlXqMFe/GGxqKDKX","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606a3af82cf05cd5733355156378d8a374c98ca4446d9cdae80928c327b91a35bafa64abd6b2a00000000860d7d9a548671fab68769590f8e6ca8
c403e4145b6691d9f681919064b6d2900b","job_id":"BkJxu9PzotcHM7q0CDVuTy9ZYtyD","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}

undefined:2
{"jsonrpc":"2.0","method":"job","params":{"blob":"0606d9ac82cf0578a12ca998428c3606f82c73ad0f1893e51b101ed2e3a4af139f4c1b8ead781f00000000ecbeec48ed5fe05547893331e2818734361405095e66e7c450ca1f7d3cd8b2a808","job_id":"kJ3YJCkNcSRDYP+N9Cu8FntFG1Lw","target":"9bc42000","id":"2dcd4384-ffc9-42e1-b52f-70df1df077b4"}}
^

SyntaxError: Unexpected token { in JSON at position 310
at JSON.parse ()
at Socket. (/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:137:25)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:264:12)
at readableAddChunk (_stream_readable.js:251:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:587:20)

communication stops on 'Unauthenticated'

it appears that after the pool sends a message to the miner 'Unauthenticated', jobs stop being sent, no reauth occurs?

[Oct 30th 12:41] message from pool to miner: {"jsonrpc":"2.0","method":"job","params":{"blob":"060697e8d9cf05f65cc887d96a9c238943b03e9f62d3a6fde35633bddf0afa54e0e3cb7b566d6a00000000168459c869697df4d02c2ecb2c0ccfbc895eeb8823e8141e1ac225493837350d10","job_id":"RQ7Ld2YAc3y2zzO4d1JGBtYnVdWt","target":"9bc42000","id":"3a8ec90a-d1dd-452a-bebe-4d2a393b20c2"}}

[Oct 30th 12:41] message sent to miner: {"type":"job","params":{"blob":"060697e8d9cf05f65cc887d96a9c238943b03e9f62d3a6fde35633bddf0afa54e0e3cb7b566d6a00000000168459c869697df4d02c2ecb2c0ccfbc895eeb8823e8141e1ac225493837350d10","job_id":"RQ7Ld2YAc3y2zzO4d1JGBtYnVdWt","target":"9bc42000","id":"3a8ec90a-d1dd-452a-bebe-4d2a393b20c2"}}

[Oct 30th 12:50] message from miner to pool: {"type":"submit","params":{"job_id":"RQ7Ld2YAc3y2zzO4d1JGBtYnVdWt","nonce":"d99080df","result":"e1d439ca45b000c4eea62a47375946e66c02396e56dba9283f0d21f92e541d00"}}

[Oct 30th 12:50] message sent to pool: {"id":7,"method":"submit","params":{"id":"3a8ec90a-d1dd-452a-bebe-4d2a393b20c2","job_id":"RQ7Ld2YAc3y2zzO4d1JGBtYnVdWt","nonce":"d99080df","result":"e1d439ca45b000c4eea62a47375946e66c02396e56dba9283f0d21f92e541d00"}}

[Oct 30th 12:50] message from pool to miner: {"id":7,"jsonrpc":"2.0","error":{"code":-1,"message":"Unauthenticated"}}

... no more messages in log

netstat -tnp shows miner is still ESTABLISHED to proxy and shows proxy is still ESTABLISHED to xmr pool.

'Unauthorized worker' breaks the code!

Sometimes 'Unauthorized worker' error can happen and this breaks the execution of the application, forcing manual restarting it!

`message from pool to miner:

{"jsonrpc":"2.0","error":{"code":-24,"message":"Unauthorized worker."},"id":1,"result":null}

C:\Users\0xc0d32\AppData\Roaming\npm\node_modules\coin-hive-stratum\src\proxy.js:166
connection.workerId = data.result.id;
^

TypeError: Cannot read property 'id' of null
at Socket. (C:\Users\0xc0d32\AppData\Roaming\npm\node_modules\coin-hive-stratum\src\proxy.js:166:43)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:264:12)
at readableAddChunk (_stream_readable.js:251:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:587:20)`

Does this function with CoinHive's new 'AuthMine'

I am speaking of this:

https://coinhive.com/blog/authedmine

When I use coin-hive-stratum alongside Authmine, the Authmine captcha fails to show itself. The reason I am using Authmine is because it is whitelisted by anti-virus, I do not want my website visitors being bothered by anti-virus alerts; should I just use minero.pw or will that also be detected by anti-virus? Let me know what you think.

invalid payment address crashes proxy

still have some lingering clients that are cached with our coinhive key, they crash the proxy

{"id":1,"method":"login","params":{"login":"TRJ4DqsRpikOZ2Rr8ftBDnVk6koYhfU1","pass":"x"}}

message from pool to miner:

{"id":1,"jsonrpc":"2.0","error":{"code":-1,"message":"Invalid payment address provided"}}

/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:138
connection.workerId = data.result.id;
^

TypeError: Cannot read property 'id' of undefined
at Socket. (/usr/local/lib/node_modules/coin-hive-stratum/src/proxy.js:138:43)
at emitOne (events.js:115:13)
at Socket.emit (events.js:210:7)
at addChunk (_stream_readable.js:264:12)
at readableAddChunk (_stream_readable.js:251:11)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onread (net.js:587:20)

Adding SSL Certs?

I'm not too good with Node, but want to get better! Is there a way to add SSL certs to the proxy for secure WSS connections?

Websocket connection failed

I have never worked with websocket/proxy type stuff, so this is new to me.
I keep getting the following error message:

Websocket connection to 'wss://localhost:8892' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED

I used certbot to generate and install my SSL certificate. Everything over https:// works fine.

I'm wondering if this is an Apache config issue. I modified a few config files but to no avail.

Syntax error v1.4.7

Code or dependecies or node version issue?

/usr/lib/node_modules/coin-hive-stratum/src/proxy.js:606
wss.on("connection", async (ws, req) => {
^

SyntaxError: Unexpected token (
at createScript (vm.js:56:10)
at Object.runInThisContext (vm.js:97:10)
at Module._compile (module.js:542:28)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)
at Module.require (module.js:497:17)
at require (internal/module.js:20:19)
at Object. (/usr/lib/node_modules/coin-hive-stratum/bin/coin-hive-stratum:3:21

coin-hive-stratum compile issue

Hey there, I'm getting an issue when trying to run coin-hive-stratum:
`function createProxy(options = defaults) {
^

SyntaxError: Unexpected token =
at exports.runInThisContext (vm.js:53:16)
at Module._compile (module.js:374:25)
at Object.Module._extensions..js (module.js:417:10)
at Module.load (module.js:344:32)
at Function.Module._load (module.js:301:12)
at Module.require (module.js:354:17)
at require (internal/module.js:12:17)
at Object. (/usr/local/lib/node_modules/coin-hive-stratum/bin/coin-hive-stratum:3:21)
at Module._compile (module.js:410:26)
at Object.Module._extensions..js (module.js:417:10)
`

I took a look at coin-hive-stratum on line 3, but it just seems to be a require for the modules.

Simple Javascript for Mining WITHOUT Proxies?

Is there no way to create a Javascipt file that will mine Moneros from a specific pool and just connect directly?

Basically without the need to use a service like now.sh that will just ban your account. I couldn't find any documentation about why a proxy was needed. Seems like I should be able to just put in the details for a pool like SupportXRM and my Monero address into a simple Javascript file and start mining :/

Am I missing something?

connection.host undefined

After a few thousand connections the script dies and I get:

/home/proxy/src/proxy.js:129
  return connection.host + ":" + connection.port + ":" + connection.address;
                    ^

TypeError: Cannot read property 'host' of undefined
    at getPoolConnectionId (/home/proxy/ch2/src/proxy.js:129:21)
    at getPoolConnection (/home/proxy/ch2/src/proxy.js:134:28)
    at Queue.minerMessageHandler (/home/proxy/ch2/src/proxy.js:329:24)
    at emitOne (events.js:115:13)
    at Queue.emit (events.js:210:7)
    at Timeout.interval.setInterval [as _onTimeout] (/home/proxy/ch2/src/queue.js:17:16)
    at ontimeout (timers.js:471:11)
    at tryOnTimeout (timers.js:306:5)
    at Timer.listOnTimeout (timers.js:266:5)

I would normally be running this on pm2, but wanted to see why the connections keep dipping

do you have example that display some UI details about hashes/s, submitted, accepted?

Okay, I was able to set it up so that hashes are being accepted. On the browser URLs, there's no details showing up for me. I tried to use coinhive's miner UI but JS in your example doesn't like working with <script src="https://coinhive.com/lib/miner.min.js" async></script> ... so, I'm kind of lost how we can have some UI.

I know your node.js app coin-hive has a UI which is very helpful to me.

Any thoughts on including an example that integrates your coin-hive example? Or at least point in the direction to experiment?

Not getting any Accepted Hashes

I tried using this but I'm getting no valid shares. I get no errors on the JS console. If I check miner.getTotalHashes() I get a high number but miner.getAcceptedHashes() returns 0. The output form nodejs looks like this:

[Oct 20th 03:56] message from pool to miner: {"jsonrpc":"2.0","method":"job","params":{"blob":"0606e8a9a9cf05ad2cbcb18e23a7a0a300087241e663ca3f7304d6480329324ce7a71d110ebf3c0000000046e2bd25b8e73d20866d8faab0c27f97ad704371bbc0e9ee871fa73c0eafd76e06","job_id":"18018","target":"cf8b0000"}}

[Oct 20th 03:56] message sent to miner: {"type":"job","params":{"blob":"0606e8a9a9cf05ad2cbcb18e23a7a0a300087241e663ca3f7304d6480329324ce7a71d110ebf3c0000000046e2bd25b8e73d20866d8faab0c27f97ad704371bbc0e9ee871fa73c0eafd76e06","job_id":"18018","target":"cf8b0000"}}

[Oct 20th 03:57] message from pool to miner: {"jsonrpc":"2.0","method":"job","params":{"blob":"0606a4aaa9cf05ad2cbcb18e23a7a0a300087241e663ca3f7304d6480329324ce7a71d110ebf3c0000000073dd1676e9d042685c2df487189c9b3015bbca89f1d6a1cefc531f602205a35008","job_id":"18019","target":"cf8b0000"}}

[Oct 20th 03:57] message sent to miner: {"type":"job","params":{"blob":"0606a4aaa9cf05ad2cbcb18e23a7a0a300087241e663ca3f7304d6480329324ce7a71d110ebf3c0000000073dd1676e9d042685c2df487189c9b3015bbca89f1d6a1cefc531f602205a35008","job_id":"18019","target":"cf8b0000"}}

SyntaxError

This is the error I'm getting when I try to run the command line

const createProxy = require(".."); ^^^^^ SyntaxError: Use of const in strict mode. at Module._compile (module.js:439:25) 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 Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:902:3 electroneum@localhost:~/electroneum-pool$

Catching errors and reconnecting

Hello,
Thanks for your work.

Actions like below causes the application to terminate cause they're not catched:

  • When miner closed connection, it was not handled by proxy and it tries to send miner a message
  • When pool returns -1 Unauthenticated error
  • When site key in the auth function are empty
  • Pool closes connection with ECONNREFUSED

And it doesnt reconnect to pool if there is some socket error happened

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.