SkillAgentSearch skills...

Ckpool

Stratum solo mining server for Bitcoin Royale, massively scalable and heavily multithreaded. Use this to mine BTCR

Install / Use

/learn @bitcoinroyale/Ckpool
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

CKPOOL for Bitcoin Royale

Stratum solo mining server for BTCR. A full tutorial on how to mine Bitcoin Royale is available here.

This is a fork of Bitcoin's CKPOOL with minor modifications to adapt it to Bitcoin Royale. Note that the original donation of 0.5% to the dev team was removed from this fork - this software now has zero dev costs and is 100% free to use.


CKPOOL + CKDB + libckpool by Con Kolivas and Andrew Smith

Ultra low overhead massively scalable multi-process, multi-threaded modular bitcoin mining pool, proxy, passthrough, library and database interface in c for Linux.

CKPOOL is code provided free of charge under the GPLv3 license but its development is mostly paid for by commissioned funding and by contributing to the authors listed in AUTHORS. If you use this code, please aid funding further development.

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

  • Broyaled communication to unmodified broyaled 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 broyaled 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 yasm
./configure --without-ckdb
make

Building with ckdb requires installation of the postgresql, gsl and ssl development libraries.

sudo apt-get install build-essential yasm libpq-dev libgsl-dev
./configure
make

older distributions may instead require a different version of gsl:

sudo apt-get install build-essential libpq-dev libgsl0ldbl libgsl0-dev yasm

N.B. ckdb also requires libssl-dev but libpq-dev depends on it and installs it

Building from git also requires autoconf and automake

sudo apt-get install build-essential yasm libpq-dev libgsl-dev autoconf automake libtool
./autogen.sh
./configure
make

Binaries will be built in the src/ subdirectory. Binaries generated will be:

  • ckpool - The main pool back end
  • ckdb - The pool's database
  • ckpmsg - An application for passing messages in libckpool format to ckpool/ckdb
  • notifier - An application designed to be run with broyaled's -blocknotify to notify ckpool of block changes.

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 | --node
-n NAME | --name NAME
-P | --passthrough
-p | --proxy
-R | --redirector
-S CKDB-SOCKDIR | --ckdb-sockdir CKDB-SOCKDIR
-s SOCKDIR | --sockdir SOCKDIR
-u | --userproxy

-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. This option is explicitly enabled when built without ckdb support.

-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, in proxy mode it looks for ckproxy.conf, in passthrough mode for ckpassthrough.conf and in redirector mode for ckredirector.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. This option does not exist when built without ckdb support.

-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 will start ckpool in passthrough node mode where it behaves like a passthrough but requires a locally running broyaled and can submit blocks itself in addition to passing the shares back to the upstream pool. It also monitors hashrate and requires more resources than a simple passthrough. Be aware that upstream pools must specify dedicated IPs/ports that accept incoming node requests with the nodeserver directive described below.

-n <NAME> will change the ckpool process name to that specified, allowing multiple different named instances to be running. By default the variant names are used: ckpool, ckproxy, ckpassthrough, ckredirector, cknode.

-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.

-R will start ckpool in a variant of passthrough mode. It is designed to be a front end to filter out users that never contribute any shares. Once an accepted share from the upstream pool is detected, it will issue a redirect to one of the redirecturl entries in the configuration file. It will cycle over entries if multiple exist, but try to keep all clients from the same IP redirecting to the same pool.

-S <CKDB-SOCKDIR> tells ckpool which directory to look for the ckdb socket to talk to. This option does not exist when built without ckdb support.

-s <SOCKDIR> tells ckpool which directory to place its own communication sockets (/tmp by default)

-u Userproxy mode will start ckpool in proxy mode as per the -p option above, but in addition it will accept username/passwords from the stratum connects and try to open additional connections with those credentials to the upstream pool specified in the configuration file and then reconnect miners to mine with their chosen username/password to the upstream pool.

ckdb takes the following options:

-b DBPREFIX | --dbprefix DBPREFIX
-c CONFIG | --config CONFIG
-d DBNAME | --dbname DBNAME
-h | --help
-k | --killold
-l LOGLEVEL | --loglevel LOGLEVEL
-n NAME | --name NAME
-p DBPASS | --dbpass DBPASS
-r CKPOOL-LOGDIR | --ckpool-logdir CKPOOL-LOGDIR
-R LOGDIR | --logdir LOGDIR
-s SOCKDIR | --sockdir SOCKDIR
-u DBUSER | --dbuser DBUSER
-v | --version
-y | --confirm
-Y CONFIRMRANGE | --confirmrange CONFIRMRANGE

ckpmsg and notifier support the -n, -p and -s options

CONFIGURATION

At least one broyaled is mandatory in ckpool mode with the minimum requi

View on GitHub
GitHub Stars9
CategoryDevelopment
Updated2mo ago
Forks6

Languages

C

Security Score

85/100

Audited on Feb 2, 2026

No findings