kanoi
11 years ago
10 changed files with 273 additions and 30 deletions
@ -0,0 +1,7 @@
|
||||
Con Kolivas <kernel@kolivas.org> |
||||
Core project lead, maintainer, author of ckpool and libckpool. |
||||
15qSxP1SQcUX3o4nhkfdbgyoWEFMomJ4rZ |
||||
|
||||
Andrew Smith <kan0i {at} kano-kun [dot] net> |
||||
Maintainer and author of ckdb. |
||||
1Jjk2LmktEQKnv8r2cZ9MvLiZwZ9gxabKm |
@ -0,0 +1,4 @@
|
||||
See git repository ('git log') for full changelog. |
||||
|
||||
Git repository can be found at: |
||||
https://bitbucket.org/ckolivas/ckpool |
@ -0,0 +1,216 @@
|
||||
CKPOOL + CKDB + libckpool by Con Kolivas and Andrew Smith. |
||||
|
||||
Ultra low overhead massively scaleable multi-process, multi-threaded modular |
||||
bitcoin mining pool, proxy, passthrough, library and database interface in c |
||||
for Linux. |
||||
|
||||
|
||||
--- |
||||
LICENSE: |
||||
|
||||
GNU Public license V3. See included COPYING for details. |
||||
|
||||
|
||||
--- |
||||
DESIGN: |
||||
|
||||
Architecture: |
||||
- Low level hand coded architecture relying on minimal outside libraries beyond |
||||
basic glibc functions for maximum flexibility and minimal overhead that can be |
||||
built and deployed on any Linux installation. |
||||
- Multiprocess+multithreaded design to scale to massive deployments and |
||||
capitalise on modern multicore/multithread CPU designs. |
||||
- Minimal memory overhead. |
||||
- Utilises ultra reliable unix sockets for communication with dependent |
||||
processes. |
||||
- Modular code design to streamline further development. |
||||
- Standalone library code that can be utilised independently of ckpool. |
||||
- Same code can be deployed in many different modes designed to talk to each |
||||
other on the same machine, local lan or remote internet locations. |
||||
|
||||
Modes of deployment: |
||||
- Comprehensive pooled mining solution with a postgresql database interface. |
||||
- Passthrough node(s) that combine connections to a single socket which can |
||||
be used to scale to millions of clients and allow the main pool to be isolated |
||||
from direct communication with clients. |
||||
- Proxy nodes with a database that act as a single client to the upstream pool |
||||
while storing full client data of their own. |
||||
- Simple proxy without the limitations of hashrate inherent in other proxy |
||||
solutions when talking to ckpool. |
||||
- Simple pool without a database. |
||||
- Library for use by other software. |
||||
|
||||
Features: |
||||
- Bitcoind communication to unmodified bitcoind with multiple failover to local |
||||
or remote locations. |
||||
- Local pool instance worker limited only by operating system resources and |
||||
can be made virtually limitless through use of multiple downstream passthrough |
||||
nodes. |
||||
- Proxy and passthrough modes can set up multiple failover upstream pools. |
||||
- Optional share logging. |
||||
- Virtually seamless restarts for upgrades through socket handover from exiting |
||||
instances to new starting instance. |
||||
- Configurable custom coinbase signature. |
||||
- Configurable instant starting and minimum difficulty. |
||||
- Rapid vardiff adjustment with stable unlimited maximum difficulty handling. |
||||
- New work generation on block changes incorporate full bitcoind transaction |
||||
set without delay or requiring to send transactionless work to miners thereby |
||||
providing the best bitcoin network support and rewarding miners with the most |
||||
transaction fees. |
||||
- Event driven communication based on communication readiness preventing |
||||
slow communicating clients from delaying low latency ones. |
||||
- Stratum messaging system to running clients. |
||||
- Accurate pool and per client statistics. |
||||
- Multiple named instances can be run concurrently on the same machine. |
||||
|
||||
|
||||
--- |
||||
BUILDING: |
||||
|
||||
Building ckpool standalone without ckdb has no dependencies outside of the |
||||
basic build tools on any linux installation. |
||||
|
||||
sudo apt-get install build-essential |
||||
./configure --without-ckdb |
||||
make |
||||
|
||||
|
||||
Building with ckdb requires installation of the postgresql development library. |
||||
|
||||
sudo apt-get install build-essential libpq-dev |
||||
./configure |
||||
make |
||||
|
||||
|
||||
Building from git also requires autoconf and automake |
||||
|
||||
sudo apt-get install build-essential libpq-dev autoconf automake |
||||
./autogen.sh |
||||
./configure |
||||
make |
||||
|
||||
|
||||
Binaries will be built in the src/ subdirectory. |
||||
|
||||
|
||||
Installation is NOT required and ckpool can be run directly from the directory |
||||
it's built in but it can be installed with: |
||||
sudo make install |
||||
|
||||
|
||||
It is anticipated that pool operators wishing to set up a full database based |
||||
installation of ckpool+ckdb will be familiar with setting up postgresql and |
||||
associated permissions to the directories where the various processes will |
||||
communicate with each other and a web server so these will not be documented. |
||||
|
||||
|
||||
--- |
||||
RUNNING: |
||||
|
||||
ckpool supports the following options: |
||||
|
||||
-A | --standalone |
||||
-c CONFIG | --config CONFIG |
||||
-d CKDB-NAME | --ckdb-name CKDB-NAME |
||||
-g GROUP | --group GROUP |
||||
-H | --handover |
||||
-h | --help |
||||
-k | --killold |
||||
-L | --log-shares |
||||
-l LOGLEVEL | --loglevel LOGLEVEL |
||||
-n NAME | --name NAME |
||||
-P | --passthrough |
||||
-p | --proxy |
||||
-S CKDB-SOCKDIR | --ckdb-sockdir CKDB-SOCKDIR |
||||
-s SOCKDIR | --sockdir SOCKDIR |
||||
|
||||
|
||||
-A Standalone mode tells ckpool not to try to communicate with ckdb or log any |
||||
ckdb requests in the rotating ckdb logs it would otherwise store. All users |
||||
are automatically accepted without any attempt to authorise users in any way. |
||||
|
||||
-c <CONFIG> tells ckpool to override its default configuration filename and |
||||
load the specified one. If -c is not specified, ckpool looks for ckpool.conf |
||||
whereas in proxy or passthrough modes it will look for ckproxy.conf |
||||
|
||||
-d <CKDB-NAME> tells ckpool what the name of the ckdb process is that it should |
||||
speak to, otherwise it will look for ckdb. |
||||
|
||||
-g <GROUP> will start ckpool as the group ID specified. |
||||
|
||||
-H will make ckpool attempt to receive a handover from a running incidence of |
||||
ckpool with the same name, taking its client listening socket and shutting it |
||||
down. |
||||
|
||||
-h displays the above help |
||||
|
||||
-k will make ckpool shut down an existing instance of ckpool with the same name, |
||||
killing it if need be. Otherwise ckpool will refuse to start if an instance of |
||||
the same name is already running. |
||||
|
||||
-L will log per share information in the logs directory divided by block height |
||||
and then workbase. |
||||
|
||||
-l <LOGLEVEL will change the log level to that specified. Default is 5 and |
||||
maximum debug is level 7. |
||||
|
||||
-n <NAME> will change the ckpool process name to that specified, allowing |
||||
multiple different named instances to be running. |
||||
|
||||
-P will start ckpool in passthrough proxy mode where it collates all incoming |
||||
connections and streams all information on a single connection to an upstream |
||||
pool specified in ckproxy.conf . Downstream users all retain their individual |
||||
presence on the master pool. Standalone mode is implied. |
||||
|
||||
-p will start ckpool in proxy mode where it appears to be a local pool handling |
||||
clients as separate entities while presenting shares as a single user to the |
||||
upstream pool specified. Note that the upstream pool needs to be a ckpool for |
||||
it to scale to large hashrates. Standalone mode is Optional. |
||||
|
||||
-S <CKDB-SOCKDIR> tells ckpool which directory to look for the ckdb socket to |
||||
talk to. |
||||
|
||||
-s <SOCKDIR> tells ckpool which directory to place its own communication |
||||
sockets (/tmp by default) |
||||
|
||||
|
||||
--- |
||||
CONFIGURATION |
||||
|
||||
At least one bitcoind is mandatory in ckpool mode with the minimum requirements |
||||
of server, rpcuser and rpcpassword set. |
||||
|
||||
Ckpool takes a json encoded configuration file in ckpool.conf by default or |
||||
ckproxy.conf in proxy or passthrough mode unless specified with -c. Sample |
||||
configurations for ckpool and ckproxy are included with the source. Entries |
||||
after the valid json are ignored and the space there can be used for comments. |
||||
The options recognised are as follows: |
||||
|
||||
|
||||
"btcd" : This is an array of bitcoind(s) with the options url, auth and pass |
||||
which match the configured bitcoind. This is mandatory in pool mode. |
||||
|
||||
"proxy" : This is an array in the same format as btcd above but is used in |
||||
proxy and passthrough mode to set the upstream pool and is mandatory. |
||||
|
||||
"btcaddress" : This is the bitcoin address to try to generate blocks to. |
||||
|
||||
"btcsig" : This is an optional signature to put into the coinbase of mined |
||||
blocks. |
||||
|
||||
"blockpoll" : This is the frequency in milliseconds for how often to check for |
||||
new network blocks and is 500 by default. |
||||
|
||||
"update_interval" : This is the frequency that stratum updates are sent out to |
||||
miners and is set to 30 seconds by default to help perpetuate transactions for |
||||
the health of the bitcoin network. |
||||
|
||||
"serverurl" : This is the IP to try to bind ckpool uniquely to, otherwise it |
||||
will attempt to bind to all interfaces in port 3333 by default in pool mode |
||||
and 3334 in proxy mode. |
||||
|
||||
"mindiff" : Minimum diff that vardiff will allow miners to drop to. Default 1 |
||||
|
||||
"startdiff" : Starting diff that new clients are given. Default 42 |
||||
|
||||
"logdir" : Which directory to store pool and client logs. Default "logs" |
Loading…
Reference in new issue