wownero-puddle/README.md

158 lines
4.9 KiB
Markdown
Raw Normal View History

2018-08-12 13:46:08 +00:00
# monero-pool
A Monero mining pool server written in C.
2019-03-08 03:50:58 +00:00
Design decisions are focused on performance and efficiency, hence the use of
libevent and LMDB. Currently it uses only two threads (one for the stratum
clients and one for the web UI clients). It gets away with this thanks to the
efficiency of libevent (for the stratum clients) and some sensible
proxying/caching being placed in front of the [web UI](#web-ui).
2018-08-12 13:46:08 +00:00
The single payout mechanism is PPLNS, which favors loyal pool miners.
I have no plans to add any other payout mechanisms or other coins. Work should
2019-03-08 03:50:58 +00:00
stay focussed on performance, efficiency and stability.
2018-08-12 13:46:08 +00:00
The pool also now supports a new, experimental and optional, method of mining
for the pool miners, whereby miners can select their *own* block template to
mine on. Further information can be found in [stratum-ss.md](./stratum-ss.md).
2018-08-12 13:46:08 +00:00
## Project status
2019-03-08 03:50:58 +00:00
I have tested this quite a bit on the Monero testnet (if you plan
2018-08-12 13:46:08 +00:00
to do the same, ensure to use `--testnet` flag when starting your wallet and
2020-01-05 21:20:42 +00:00
daemon) and mainnet, but there is always room for improvement.
2018-08-12 13:46:08 +00:00
2019-03-08 03:50:58 +00:00
There is also a reference mainnet pool setup and running at
[http://monerop.com](http://monerop.com).
2018-08-12 13:46:08 +00:00
If you want to help with testing or help setting up your own pool, give me a
shout on IRC: jtgrassie on Freenode.
## Compiling from source
### Dependencies
The build system now requires the Monero source tree to be cloned and compiled.
Follow the
[instructions](https://github.com/monero-project/monero#compiling-monero-from-source)
for compiling Monero, then export the following variable:
```bash
export MONERO_ROOT=/path/to/cloned/monero
```
Replacing the path appropriately.
2019-04-07 15:59:21 +00:00
Beyond the Monero dependencies, the following extra libraries are also required
to build the pool:
2018-08-12 13:46:08 +00:00
- liblmdb
- libevent
- json-c
- uuid
As an example, on Ubuntu, these dependencies can be installed with the following
2018-08-12 13:46:08 +00:00
command:
```
2020-01-05 21:20:42 +00:00
sudo apt-get install liblmdb-dev libevent-dev libjson-c-dev uuid-dev
2018-08-12 13:46:08 +00:00
```
### Compile
First install all the dependencies as described above.
2018-08-12 13:46:08 +00:00
Then to compile the pool as a release build, run:
```
2019-02-24 19:07:16 +00:00
make release
2018-08-12 13:46:08 +00:00
```
The application will be built in `build/release/`.
Optionally you can compile a debug build by simply running:
```
make
```
Debug builds are output in `build/debug/`.
## Configuration
Copy and edit the `pool.conf` file to either the same directory as the compiled
binary `monero-pool`, or place it in your home directory or launch `monero-pool`
with the flag `--config-file path/to/pool.conf` to use a custom location. The
2019-03-08 03:50:58 +00:00
configuration options should be self explanatory.
2018-08-12 13:46:08 +00:00
#### Block notification
There is one configuration option that deserves a special mention.
You can optionally start the pool with the flag `--block-notified` (or set in
the config file: `block-notified = 1`). This will prevent the pool from
*polling* for new blocks using a timer, and instead, fetch a new block template
when it receives a *signal* (specifically, *SIGUSR1*). Now whenever you start
`monerod`, you'll make use of its `--block-notify` option.
E.g.
<pre>
monerod ... <b>--block-notify '/usr/bin/pkill -USR1 monero-pool'</b>
</pre>
This instructs `monerod` to send the required signal, *SIGUSR1*, to your pool
whenever a new block is added to the chain.
Using this mechanism has a significant benefit - your pool *immediatley* knows
when to fetch a new block template to send to your miners. You're essentially
giving your miners a head-start over miners in pools which use polling (which
is what all the other pool implementations do).
2018-08-12 13:46:08 +00:00
## Running
2019-03-08 03:50:58 +00:00
Ensure you have your Monero daemon (`monerod`) and wallet RPC
(`monero-wallet-rpc`) up and running with the correct host and port settings as
defined in the pool config file.
2018-08-12 13:46:08 +00:00
It is highly recommended to run these on the same host as the pool server to
avoid network latency when their RPC methods are called.
2019-02-24 19:07:16 +00:00
Then simply `cd build/debug|release` and run `./monero-pool`.
2018-08-12 13:46:08 +00:00
2019-03-08 03:50:58 +00:00
## Web UI
There is a minimal web UI that gets served on the port specified in the config
file. It's advisable to use either Apache or Nginx as a proxy in front of this
with some appropriate caching.
2020-01-05 21:20:42 +00:00
## SSL
The pool has been tested behind both [HAProxy](http://www.haproxy.org/) and
[stunnel](https://www.stunnel.org/), so if you wish to provide SSL access to the
pool, these are both good options and simple to setup. The [reference
pool](https://monerop.com) makes use of HAProxy and port 4343 for SSL traffic.
The web UI, as mentioned above, should ideally be placed behind a *caching
proxy*. Therefore SSL termination should be be configured there (i.e. in
Apache/Nginx).
2018-08-12 13:46:08 +00:00
## Supporting the project
This mining pool has **no built-in developer donation** (like *other* mining
pool software has), so if you use it and want to donate, XMR donations to:
```
451ytzQg1vUVkuAW73VsQ72G96FUjASi4WNQse3v8ALfjiR5vLzGQ2hMUdYhG38Fi15eJ5FJ1ZL4EV1SFVi228muGX4f3SV
```
![QR code](./qr-small.png)
2018-08-12 13:46:08 +00:00
would be very much appreciated.
## License
Please see the [LICENSE](./LICENSE) file.
2019-02-09 19:23:51 +00:00
[//]: # ( vim: set tw=80: )