{"id":16693713,"url":"https://github.com/cculianu/asicseer-pool","last_synced_at":"2025-10-10T15:08:43.160Z","repository":{"id":137476781,"uuid":"245358186","full_name":"cculianu/asicseer-pool","owner":"cculianu","description":"ASICseer Pool: Fast, C-based, multithreaded mining pool software for Bitcoin Cash","archived":false,"fork":false,"pushed_at":"2025-02-21T23:37:14.000Z","size":5041,"stargazers_count":13,"open_issues_count":1,"forks_count":7,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-04-10T01:44:38.339Z","etag":null,"topics":["asicseer-pool","bch-pool","bitcoin","bitcoin-cash","bitcoin-cash-pool","ckpool","mining-pool","sha256"],"latest_commit_sha":null,"homepage":"https://github.com/cculianu/asicseer-pool","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cculianu.png","metadata":{"files":{"readme":"README","changelog":"ChangeLog","contributing":null,"funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-06T07:40:24.000Z","updated_at":"2025-04-04T00:03:24.000Z","dependencies_parsed_at":"2024-06-28T10:27:50.096Z","dependency_job_id":"78925725-fda9-458f-8786-342f053b11cf","html_url":"https://github.com/cculianu/asicseer-pool","commit_stats":null,"previous_names":[],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/cculianu/asicseer-pool","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cculianu%2Fasicseer-pool","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cculianu%2Fasicseer-pool/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cculianu%2Fasicseer-pool/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cculianu%2Fasicseer-pool/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cculianu","download_url":"https://codeload.github.com/cculianu/asicseer-pool/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cculianu%2Fasicseer-pool/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279004565,"owners_count":26083734,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["asicseer-pool","bch-pool","bitcoin","bitcoin-cash","bitcoin-cash-pool","ckpool","mining-pool","sha256"],"created_at":"2024-10-12T16:32:07.837Z","updated_at":"2025-10-10T15:08:43.144Z","avatar_url":"https://github.com/cculianu.png","language":"C","funding_links":[],"categories":["Software"],"sub_categories":["Mining"],"readme":"ASICseer Pool\nCalin Culianu \u003ccalin.culianu@gmail.com\u003e\n\nUltra low overhead massively scalable multi-process, multi-threaded modular\nBitcoin Cash mining pool, proxy, passthrough, library and database interface in\nC for Linux. Features SPLNS-style payout scheme.\n\nasicseer-pool is code provided free of charge under the GPLv3 license but its\ndevelopment is mostly paid for by commissioned funding.\n\nPlease consider contributing if you are running it on a pool or contributing to\nthe authors listed in AUTHORS if you use this code to aid funding further\ndevelopment.\n\nUpdated and maintained by:\n    Calin Culianu \u003ccalin.culianu@gmail.com\u003e\n    bitcoincash:qplw0d304x9fshz420lkvys2jxup38m9symky6k028\n\n===\n\nThis software is originally based on the work of Con Kolivas' ckpool\n   [ckpool-splns](https://bitbucket.org/ckolivas/ckpool-splns/)\n\nIt has been updated and reworked to add features and to support Bitcoin Cash\n(rather than Bitcoin).\n\n* Removed segwit\n* Added larger merkle tree support (for mining 32MB blocks)\n* Added cash address support\n* Configurable pool fee support\n   - Features 20% of pool fee as a dev donation to Calin (me), and Bitcoin Cash\n     Node wallets, by default.\n* Added \"mindiff_overrides\" which allows a pool to give out larger minimum and\n  starting difficulty for stratum clients matching a particular user agent\n  string (useful for NiceHash, which requires pools have a high difficulty).\n* Updated asicseer-db (formerly ckdb) sources to actually compile on modern\n  Linux\n* Added ZMQ support for new block notifications\n* Removed asicseer-db, removed all sql, HTML, \u0026 php files related to this.\n* Updated source tree to use cmake, removed autotools-based build.\n* Added optional \"solo\" mining mode (-B / --solo).\n* Fixed bugs\n\nBUILDING\n---\n\nA relatively recent, C++-20-capable compiler is required.\n\n$ sudo apt-get install build-essential libzmq3-dev cmake\n$ mkdir build \u0026\u0026 cd build\n$ cmake ..\n$ make\n\nCompiled files will appear in the src/ subdirectory relative to the build\ndirectory.\n\n---\n\nOriginal README follows (modified by Calin from the original to reflect added\nconfig options):\n\n---\n\nOriginal: ckpool + ckdb + libckpool by Con Kolivas and Andrew Smith.\n\n---\nLICENSE:\n\nGNU Public license V3. See included COPYING for details.\n\n\n---\nDESIGN:\n\nArchitecture:\n- Low level hand coded architecture relying on minimal outside libraries beyond\n  basic glibc functions for maximum flexibility and minimal overhead that can be\n  built and deployed on any Linux installation.\n- Multiprocess \u0026 multithreaded design to scale to massive deployments and\n  capitalize on modern multicore/multithread CPU designs.\n- Minimal memory overhead.\n- Utilises ultra reliable unix sockets for communication with dependent\n  processes.\n- Modular code design to streamline further development.\n- Standalone library code that can be utilised independently of asicseer-pool.\n- Same code can be deployed in many different modes designed to talk to each\n  other on the same machine, local lan or remote internet locations.\n\nModes of deployment:\n- Comprehensive pooled mining solution with a postgresql database interface.\n- Passthrough node(s) that combine connections to a single socket which can be\n  used to scale to millions of clients and allow the main pool to be isolated\n  from direct communication with clients.\n- Proxy nodes with a database that act as a single client to the upstream pool\n  while storing full client data of their own.\n- Simple proxy without the limitations of hashrate inherent in other proxy\n  solutions when talking to asicseer-pool.\n- Simple pool without a database.\n- Library for use by other software.\n\nFeatures:\n- Bitcoind communication to unmodified bitcoind with multiple failover to local\n  or remote locations.\n- Local pool instance worker limited only by operating system resources and can\n  be made virtually limitless through use of multiple downstream passthrough\n  nodes.\n- Proxy and passthrough modes can set up multiple failover upstream pools.\n- Optional share logging.\n- Virtually seamless restarts for upgrades through socket handover from exiting\n  instances to new starting instance.\n- Configurable custom coinbase signature.\n- Configurable instant starting and minimum difficulty.\n- Rapid vardiff adjustment with stable unlimited maximum difficulty handling.\n- New work generation on block changes incorporate full bitcoind transaction set\n  without delay or requiring to send transactionless work to miners thereby\n  providing the best bitcoin network support and rewarding miners with the most\n  transaction fees.\n- Event driven communication based on communication readiness preventing slow\n  communicating clients from delaying low latency ones.\n- Stratum messaging system to running clients.\n- Accurate pool and per client statistics.\n- Multiple named instances can be run concurrently on the same machine.\n- SPLNS payout scheme (payout directly to users for each block found)\n\n\n---\nBUILT BINARIES:\n\nBinaries will be built in the src/ subdirectory. Binaries generated will be:\nasicseer-pool - The main pool back-end.\nasicseer-pmsg - An application for passing messages in libasicseerpool format\n                to asicseer-pool/asicseer-db.\nnotifier      - An application designed to be run with bitcoind's -blocknotify\n                to notify asicseer-pool of block changes. It is recommended\n                that you not use this application but instead configure\n                bitcoind to use ZMQ -zmqpubhashblock= and set the \"zmq\" field\n                for each bitcoind.\n\n\nInstallation is NOT required and asicseer-pool can be run directly from the\ndirectory it's built in.\n\n---\nRUNNING:\n\nasicseer-pool supports the following options:\n\n-A | --standalone (unused)\n-B | --solo\n-c CONFIG | --config CONFIG\n-g GROUP | --group GROUP\n-H | --handover\n-h | --help\n-k | --killold\n-L | --log-shares\n-l LOGLEVEL | --loglevel LOGLEVEL\n-N | --node\n-n NAME | --name NAME\n-P | --passthrough\n-p | --proxy\n-R | --redirector\n-s SOCKDIR | --sockdir SOCKDIR\n-u | --userproxy\n-v | --version\n\n\n-A Standalone mode (defunct). This option currently does nothing but used\nto tell the program not to use asicseer-db. It only exists now for backward\ncompatibility.\n\n-B Solo mining mode. Payouts will give all of the reward (minus fees) to the\nminer that solved the block. Use this if you intend to run a solo mining pool.\nThis option does not work with any of the following: -N, -P, -p, -R, -u.\n** Note ** In solo mining mode, all miner clients must have valid BCH addresses\nas their username prefix otherwise they will be rejected.\n\n-c \u003cCONFIG\u003e tells asicseer-pool to override its default configuration filename\nand load the specified one. If -c is not specified, asicseer-pool looks for:\nasicseer-pool.conf, in proxy mode it looks for asicseer-proxy.conf, in\npassthrough mode for asicseer-passthrough.conf and in redirector mode for\nasicseer-redirector.conf\n\n-g \u003cGROUP\u003e will start asicseer-pool as the group ID specified.\n\n-H will make asicseer-pool attempt to receive a handover from a running\nincidence of asicseer-pool with the same name, taking its client listening\nsocket and shutting it down.\n\n-h displays the above help\n\n-k will make asicseer-pool shut down an existing instance of asicseer-pool with\nthe same name, killing it if need be. Otherwise asicseer-pool will refuse to\nstart if an instance of the same name is already running.\n\n-L will log per share information in the logs directory divided by block height\nand then workbase.\n\n-l \u003cLOGLEVEL will change the log level to that specified. Default is 5 and\nmaximum debug is level 7.\n\n-N will start asicseer-pool in passthrough node mode where it behaves like a\npassthrough but requires a locally running bitcoind and can submit blocks\nitself in addition to passing the shares back to the upstream pool. It also\nmonitors hashrate and requires more resources than a simple passthrough. Be\naware that upstream pools must specify dedicated IPs/ports that accept\nincoming node requests with the nodeserver directive described below.\n\n-n \u003cNAME\u003e will change the asicseer-pool process name to that specified,\nallowing multiple different named instances to be running. By default the\nvariant names are used: asicseer-pool, asicseer-proxy, asicseer-passthrough,\nasicseer-redirector, asicseer-node.\n\n-P will start asicseer-pool in passthrough proxy mode where it collates all\nincoming connections and streams all information on a single connection to an\nupstream pool specified in asicseer-proxy.conf . Downstream users all retain\ntheir individual presence on the master pool. Standalone mode is implied.\n\n-p will start asicseer-pool in proxy mode where it appears to be a local pool\nhandling clients as separate entities while presenting shares as a single user\nto the upstream pool specified. Note that the upstream pool needs to be a\nasicseer-pool for it to scale to large hashrates. Standalone mode is Optional.\n\n-R will start asicseer-pool in a variant of passthrough mode. It is designed\nto be a front end to filter out users that never contribute any shares. Once an\naccepted share from the upstream pool is detected, it will issue a redirect to\none of the redirecturl entries in the configuration file. It will cycle over\nentries if multiple exist, but try to keep all clients from the same IP\nredirecting to the same pool.\n\n-s \u003cSOCKDIR\u003e tells asicseer-pool which directory to place its own communication\nsockets (/tmp by default)\n\n-u Userproxy mode will start asicseer-pool in proxy mode as per the -p option\nabove, but in addition it will accept username/passwords from the stratum\nconnects and try to open additional connections with those credentials to the\nupstream pool specified in the configuration file and then reconnect miners to\nmine with their chosen username/password to the upstream pool.\n\n-v Prints the program version and exits immediately.\n\n---\nCONFIGURATION\n\nAt least one bitcoind is mandatory in asicseer-pool mode with the minimum\nrequirements of server, rpcuser and rpcpassword set.\n\nasicseer-pool takes a JSON encoded configuration file in asicseer-pool.conf by\ndefault or asicseer-proxy.conf in proxy or passthrough mode unless specified\nwith -c. Sample configurations for asicseer-pool and asicseer-proxy are included\nwith the source. Entries after the valid json are ignored and the space there\ncan be used for comments. The options recognised are as follows:\n\n\"bchaddress\" :\n    This is the bitcoin cash address for the pool. All pool fees go to this\n    address. It is also used as the fallback address for leftover dust or in\n    case a worker address is invalid. Both legacy and cashaddr formats are\n    supported.\n\n\"bchsig\" :\n    This is optional text to put into the coinbase transaction of mined blocks.\n    It will be verbatim copied to the coinbase scriptsig (max 96 bytes).\n\n    You may specify either a string or an array of strings here. If an array is\n    specified, then a string will be randomly picked from the array each time\n    a new coinbase transaction is generated.\n\n    Example 1:\n\n        \"bchsig\" : \"/This is my pool's only sig - Use BCHN/\n\n    Example 2:\n\n        \"bchsig\" : [\n            \"/This is a sig/\",\n            \"/This is another sig/\"\n        ]\n\n\"blocking_timeout\" :\n    The number of seconds to wait for a client that stopped responding to our\n    packets (on the TCP level) before considering them out-to-lunch, and closing\n    the connection.  Defaults to 60 seconds.  Do not set this below 10.  If you\n    wish to disable idle protection of clients, set this to a high value\n    e.g. 999999999.\n\n\"blockpoll\" :\n    The frequency in milliseconds for how often to check for new network blocks\n    (default: 100). This is intended to be a backup only for when the notifier\n    and/or zmq are not set up and only polls if neither the \"notify\" nor \"zmq\"\n    fields are not set on a btcd.\n\n\"btcd\" :\n    This is an array of bitcoind(s) with the options: \"url\", \"auth\" and \"pass\"\n    which match the configured bitcoind. The optional boolean field \"notify\", if\n    true, tells asicseer-pool that this bitcoind is using the notifier, and does\n    not need to be polled for block changes.\n\n    Additionally, the string option \"zmq\" : \"tcp://ip.to.bitcoind:port\" can be\n    specified per btcd in which case the software will subscribe to the\n    bitcoind's ZMQ pub \"hashblock\" notification to receive blockchain change\n    notifications. This requires bitcoind be configured with the same\n    -zmqpubhashblock= option. The option \"zmq\", if present, also implies\n    \"notify\" : true. It is highly recommended that pool operators use this zmq\n    facility to receive blockchain change notifications from bitcoind, since it\n    is the lowest-latency mechanism available, and it reduces overhead as\n    compared to polling.\n\n    If no btcd is specified, asicseer-pool will look for one on localhost:8332\n    with the username \"user\" and password \"pass\". The maintainers of this\n    software recommend BCHN as the bitcoind node implementation to use, since it\n    has the fastest JSON-RPC implementation.\n\n    Example:\n\n        \"btcd\" : [\n            {\n               \"url\" : \"192.168.0.101:8332\",\n               \"auth\" : \"someuser1\",\n               \"pass\" : \"somepass1\",\n               \"zmq\" : \"tcp://192.168.0.101:28332\"\n            },\n            {\n               \"url\" : \"192.168.0.15:8332\",\n               \"auth\" : \"someuser2\",\n               \"pass\" : \"somepass2\",\n               \"zmq\" : \"tcp://192.168.0.15:28332\"\n            },\n            {\n               \"url\" : \"192.168.0.151:8332\",\n               \"auth\" : \"this_one_polls\",\n               \"pass\" : \"zzz\",\n               \"notify\" : false\n            }\n        ]\n\n\"disable_dev_donation\":\n    Defaults false. If true, disable dev donations specified in donation.h.\n\n\"fee_discounts\":\n    Offer discounts to specific users, keyed off their mining address. 1.0 =\n    full fee discount, 0.0 = no fee discount. All users default to 0.0 (no\n    discount) if unspecified.\n\n    Example:\n\n        \"fee_discounts\" : {\n           \"address1\" : 0.25,\n           \"address2\" : 0.33,\n           \"address3\" : 1.0\n        }\n\n\"logdir\" :\n    Which directory to store pool and client logs. Default \"logs\"\n\n\"maxclients\" :\n    Optional upper limit on the number of clients asicseer-pool will accept\n    before rejecting further clients.\n\n\"maxdiff\" :\n    Optional maximum diff that vardiff will clamp to where zero is no maximum.\n\n\"mindiff\" :\n    Minimum diff that vardiff will allow miners to drop to. Default 1\n\n\"mindiff_overrides\" :\n    Optional JSON object (dictionary) of useragent, mindiff pairs.\n\n    Example:\n\n        \"mindiff_overrides\" : {\n            \"nicehash\" : 500000,\n            \"foohash\" : 750000\n        }\n\n    This is a mechanism to support a raised minimum difficulty for clients\n    connecting to the pool based on their \"useragent\" string (that they normally\n    send via `mining.subscribe` on initial connect). The \"useragent\" specified\n    here is a prefix match (case insensitive). If a client's useragent matches\n    the specified prefix, then it will have its minimum and starting difficulty\n    set to the override value. Note: The override values specified here cannot\n    be lower than the pool's \"mindiff\" setting -- they must always be higher\n    (similarly this value must also be below \"maxdiff\"). This mechanism was\n    initially designed so that NiceHash clients can connect to a pool and get a\n    special-cased raised difficulty (since NiceHash refuses to operate if share\n    difficulty is \u003c 500000, as of the time of this writing).\n\n\"nodeserver\" :\n    This takes the same format as the serverurl array and specifies additional\n    IPs/ports to bind to that will accept incoming requests for mining node\n    communications. It is recommended to selectively isolate this address to\n    minimize unnecessary communications with unauthorized nodes.\n\n\"nonce1length\" :\n    This is optional allowing the extranonce1 length to be chosen from 2 to 8.\n    Default 4\n\n\"nonce2length\" :\n    This is optional allowing the extranonce2 length to be chosen from 2 to 8.\n    Default 8\n\n\"pool_fee\" :\n    The percentage to pay out to the pool \"bchaddress\" for each found block, as\n    a floating point percentage of the total mining reward. If unspecified, 1.0\n    is the default (1%). The pool fee is taken from the total coinbase reward.\n    Set this value to 0.0 to disable. Values \u003e= 100.0 will be clamped to 100.0.\n    The pool_fee will appear as the first output in the coinbase transaction.\n\n\"proxy\" :\n    This is an array in the same format as btcd above but is used in proxy and\n    passthrough mode to set the upstream pool and is mandatory.\n\n\"redirecturl\" :\n    This is an array of URLs that asicseer-pool will redirect active miners to\n    in redirector mode. They must be valid resolvable URLs+ports.\n\n\"serverurl\" :\n    This is the IP(s) to try to bind asicseer-pool uniquely to, otherwise it\n    will attempt to bind to all interfaces in port 3333 by default in pool mode\n    and 3334 in proxy mode. Multiple entries can be specified as an array by\n    either IP or resolvable domain name but the executable must be able to bind\n    to all of them and ports up to 1024 usually require privileged access.\n\n\"single_payout_override\":\n    A string, which should be a valid BCH address. If this is specified the\n    coinbase tx generator will completely skip SPLNS payouts in coinbase and\n    will put all miner rewards into a single output which is to the specified\n    address. This option is offered as a work-around for T17 issues where\n    multiple SPLNS payouts crash Bitmain mining rigs, so we must simply pay\n    the mining reward to a signle address. Since SPLNS payouts directly to\n    users in coinbase are disabled when this is specified, the pool operator\n    is expected to settle debts privately with miners. This setting is an\n    advanced setting for a special case and is not normally recommended.\n\n\"startdiff\" :\n    Starting diff that new clients are given. Default 42\n\n\"update_interval\" :\n    This is the frequency that stratum updates are sent out to miners and is set\n    to 30 seconds by default to help perpetuate transactions for the health of\n    the bitcoin network.\n\n\"version_mask\" :\n    This is a mask of which bits in the version number it is valid for a client\n    to alter and is expressed as an hex string. Eg \"00fff000\" Default is\n    \"1fffe000\".\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcculianu%2Fasicseer-pool","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcculianu%2Fasicseer-pool","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcculianu%2Fasicseer-pool/lists"}