How to Create a Mining Pool: Software, Cost and Math

How to Create a Mining Pool: Software, Cost and Math

You can have a working stratum server accepting shares in an afternoon. Building software is not what stops people — two numbers are. To offer PPS payouts on Bitcoin without going broke you need a reserve of roughly 360 BTC at a 2% fee, and to find a block more often than once a week you need about 1 EH/s — some 5,000 modern ASICs. Everything else in this guide is downstream of those two facts.

The second problem is the advice itself. Nearly every guide ranking for this question tells you to install MPOS or NOMP. MPOS has not had a commit since July 2019 and its own repository says it is not maintained. Miningcore, the most popular option after it, was archived by its author in September 2023. Following those guides means building on dead code before you write a line of your own.

Do you actually need your own pool?

Four different goals get described as “creating a mining pool”, and only one of them needs a pool business. Two are solved by software you can install this evening, one takes weeks of accounting work, and one needs funding and a lawyer. Find yours before renting a server.

What you actually want What to build Effort
Keep the full block reward from my own farm ckpool in --btcsolo mode on your own node — no accounting, no miners but you An afternoon
Mine at home without a custodian holding my coins Public Pool (self-hosted) for Bitcoin, or P2Pool for Monero — both zero fee An evening
Pool the hashrate of a group I already have A stratum server plus your own accounting — the real subject of this guide Weeks
Run a public pool as a business All of the above, plus reserves, legal review, support and marketing Months, funded

Pool software in 2026: alive and abandoned

Five projects are actively maintained and five are effectively dead, and that is the whole landscape. The living ones cover Bitcoin stratum, decentralised Monero mining and the Stratum V2 protocol. The dead ones are, almost exactly, the packages that guides still recommend. Every date below comes from the public repository and can be re-checked in ten seconds.

Software Role Last commit Status
ckpool Bitcoin stratum server, proxy, passthrough (C) Sep 2026 maintained Stratum V2 in tree
P2Pool Decentralised Monero pool — no operator at all (C++) Sep 2026 maintained 1,489 stars
public-pool Bitcoin stratum server with a web UI (TypeScript) Aug 2026 maintained self-hostable
Stratum V2 (SRI) Protocol libraries, not a pool (Rust) Sep 2026 maintained reference impl.
DATUM Gateway Lets miners build their own block templates (C) Aug 2026 maintained
Miningcore Multi-coin pool engine (C#) Sep 2023 archived by author
NOMP Node Open Mining Portal (JavaScript) Jan 2024 stalled
s-nomp NOMP fork for Equihash coins Dec 2023 stalled
open-ethereum-pool Ethash pool (Go) May 2023 archived
MPOS Mining Portal Open Source (PHP) Jul 2019 abandoned by its own README

Repository states checked 13 September 2026.

The four parts of a pool — and which ones you get for free

A pool is not one program but four: a coin daemon, a stratum server, an accounting and payout layer, and a front end for miners. Open source hands you the first two for free and the fourth cheaply. The third — the part that moves other people’s money — you write yourself, and that is where building a pool actually gets hard.

  1. A coin daemon. A full node of the chain you mine, which hands out block templates and broadcasts solved blocks. Non-negotiable: you cannot run a pool against someone else’s API.
  2. A stratum server. Holds thousands of TCP connections, hands out work, validates shares, adjusts difficulty per miner. This is what ckpool and public-pool are.
  3. Accounting and payouts. Counts each miner’s shares, applies your payout model, sends coins, handles minimums and fees. This is the part nobody gives you.
  4. A front end. Dashboards, worker stats, an API. Optional on day one, mandatory by month two.

Quickstart: a Bitcoin stratum server on one box

A stratum server that accepts shares is two build packages, one config file and a synced node. The commands below come from ckpool’s own documentation and assume Ubuntu or Debian with the Bitcoin node on the same machine. What you have at the end is a working pool with no payout system — that layer is still yours to write.

Build requirements are genuinely small — ckpool depends on nothing beyond the base toolchain and yasm:

sudo apt install build-essential yasm

Optional features add packages: libzmq3-dev for ZMQ block notifications, libcapnp-dev and capnproto for IPC. For a solo-mining setup the project publishes an install script that does the whole job, node included:

wget https://api.bitbucket.org/2.0/repositories/ckolivas/ckpool/src/master/scripts/install-ckpool-solo.sh
chmod +x install-ckpool-solo.sh
sudo ./install-ckpool-solo.sh

A minimal ckpool.conf needs one btcd entry and the address that receives block rewards:

{
  "btcd": [{
    "url": "127.0.0.1:8332",
    "auth": "rpcuser",
    "pass": "rpcpassword"
  }],
  "btcaddress": "bc1q...",
  "serverurl": ["0.0.0.0:3333", "0.0.0.0:4334"],
  "donation": 0.5
}

Three behaviours worth knowing before you start:

  • With no serverurl, ckpool binds every interface on port 3333. A port numbered above 4000 becomes a high-difficulty port with a minimum difficulty of one million — that is how you keep large farms from flooding you with low-diff shares.
  • Run it with -B (--btcsolo) and it becomes per-username solo: usernames must be valid Bitcoin addresses, and whoever solves the block receives 100% of it. No accounting needed, because there is nothing to split.
  • The donation field defaults to 0.5% of solved blocks to the developers. Leaving it is the polite way to fund the software you are building a business on.

Proxy and passthrough modes are in the same binary. Passthrough is how large pools scale: the public-facing nodes terminate miner connections and forward everything upstream over a single socket, keeping the real pool off the open internet.

The reserve formula that rules out PPS

New operators want to offer PPS — pay per share, guaranteed, regardless of whether the pool finds a block. It reads as the friendliest model. It is also the one that bankrupts pools, and the size of the problem has been known since 2011.

Meni Rosenfeld’s analysis of pooled mining reward systems derives the reserve an operator needs to keep the probability of eventual bankruptcy below ε:

With Bitcoin’s block subsidy at 3.125 BTC, that works out as:

Pool fee Reserve for 5% ruin risk Reserve for 1% ruin risk
1%468 BTC720 BTC
2%234 BTC360 BTC
4%117 BTC180 BTC

That is capital sitting idle purely to absorb variance, and it explains something you can verify on any pool ranking: the pools offering FPPS and PPS+ on Bitcoin are the largest operators in the market, and the small ones run PPLNS.

Practical conclusion: launch on PPLNS. Under PPLNS you pay out of blocks actually found, so a run of bad luck costs your miners patience rather than costing you solvency. If you want the mechanics of each model side by side, we cover them in PPS vs PPLNS vs FPPS.

How much hashrate before the pool finds anything

Expected time to a block is difficulty × 2³² ÷ hashrate. At the Bitcoin difficulty of 13 September 2026 — 127.45 T, with the network at roughly 952 EH/s — a new pool’s prospects look like this:

Pool hashrate Roughly this many ASICs Share of network Average wait per block
1 PH/s50.0001%17 years
10 PH/s500.001%1.7 years
100 PH/s5000.01%63 days
1 EH/s5,0000.105%6.3 days
10 EH/s50,0001.05%15 hours

ASIC counts assume 200 TH/s per machine. Difficulty changes every two weeks — the live network figure sits on our Bitcoin page.

Read the first row again. A pool with five machines pays its miners nothing for years, because under PPLNS there is nothing to pay out of. This is why almost every successful small pool launched on a coin where a meaningful share of the network was reachable — not on Bitcoin.

What it costs and what it earns

Costs are the easy part. A stratum server is not demanding: ckpool is built around minimal memory overhead and multi-process scaling. The node is what needs disk — Bitcoin’s own documentation puts the initial block download at around 740 GB and ongoing traffic at 200 GB uploaded per month. A dedicated box with a modern multi-core CPU, 64 GB of RAM, NVMe storage and unmetered gigabit covers node, stratum and database on day one. You will want a second server in another region before you take the pool public, plus a small hot wallet.

Revenue is arithmetic you can do before spending anything:

daily fee income = your hashrate ÷ network hashrate × daily network issuance × your fee

On 13 September 2026 the Bitcoin network was paying out roughly 452 BTC per day across subsidy and transaction fees. So a pool running 1 EH/s — five thousand machines — at a 1% fee grosses about 0.14 BTC a month. That is the whole business at that size, before servers, before support, before the wallet.

The uncomfortable implication is that pool operation is a volume business with thin margins, and the runway to volume is long. Operators who succeed at it usually already own hashrate, or sell something alongside the pool — hosting, hardware, firmware, or data.

When distributing rewards makes you a money transmitter

The moment your pool holds coins that belong to miners and sends them onward, you are in regulated territory. In the United States, FinCEN’s 2019 guidance on convertible virtual currencies devotes section 5.4 to mining pools and cloud miners. Its conclusion is narrow but useful: where the pool leader distributes what the pool earned among its members in proportion to the processing power they contributed, that distribution does not by itself qualify as money transmission under the Bank Secrecy Act.

The narrowness matters. Bolt other services onto the payout path — holding balances for purposes beyond the payout, converting between coins, letting members transfer funds to each other — and you are no longer in the safe description. The guidance explicitly contemplates operators who combine managing and renting services with other activity.

Uptime and DDoS: stratum is TCP

Pools are attacked, routinely, often by competitors. The reflex is to put the pool behind Cloudflare — and that reflex fails, because stratum is a raw TCP protocol on port 3333, not HTTP. Standard HTTP proxying protects your website and leaves the thing that earns money exposed. TCP-level protection is a different product tier.

The cheapest working answer is to choose a host whose network filters attacks for you. OVHcloud, for example, states that anti-DDoS is enabled on all its products at no additional cost, covering packet floods, spoofing, malformed and amplification attacks — with 17 Tbit/s of global filtering capacity and up to 1.3 Tbit/s of mitigation per attack. That is infrastructure a new pool cannot buy any other way at that price.

Three more habits that separate pools that survive from pools that vanish:

  • Never expose the backend. Put ckpool passthrough or proxy nodes in front; miners connect to those, and the pool itself stays on an address nobody knows.
  • Run stratum endpoints in at least two regions. Latency costs your miners stale shares, and a single region means a single outage takes the pool down.
  • Publish a status page and your block history. Miners cannot audit your servers; visible numbers are the only trust you can offer at the start.

Getting miners — the part that kills pools

Nearly every dead pool was technically fine; what it lacked was hashrate. Miners are conservative for good reason — switching pools means trusting a stranger with several days of unpaid earnings, and a pool that disappears takes that balance with it. Everything below is a way of lowering that risk in the miner’s eyes, because no feature list overcomes it.

What actually moves hashrate toward a new pool, in rough order of effectiveness:

  • A coin the big pools serve badly. Being one of three pools on a chain beats being the fortieth on Bitcoin. This is the single biggest decision you will make.
  • A verifiable block history. Publish every block with its height and reward from day one. The pools that earn trust fastest are the ones whose claims can be checked against the chain.
  • Presence where miners compare pools. Listings on public pool trackers — ours included — are how most miners find anything not already huge.
  • A launch fee of zero, with an end date. Honest and effective — while a permanent 0% fee invites the obvious question of how you are funded.
  • Payout terms a small miner can reach. A minimum tuned to farms silently excludes the people most likely to try a new pool.

Cheaper routes to the same goal

Three of the four goals in the first table are already solved by software you can install tonight: P2Pool for Monero, ckpool’s solo mode for a farm you already own, and public-pool for home miners. All three are free, all three skip accounting entirely, and none of them puts you in custody of anyone else’s coins.

P2Pool (Monero) — a pool with no operator. It runs its own merge-mined side chain, so there is no pool wallet and no custody: blocks pay miners directly. Zero fee, PPLNS, and a minimum payout around 0.00027 XMR — orders of magnitude below any custodial pool. The documented caveat is honest: below roughly 15 MH/s of pool hashrate, blocks come slower than the six-hour PPLNS window and not every share earns a payout.

ckpool in solo mode — for a farm you already own. One flag, no accounting, 100% of any block to the address that found it. If your reason for building a pool is to stop paying someone else’s fee on your own hashrate, this is the whole project.

public-pool — for home miners and Bitaxe swarms. A self-hostable stratum server with a web UI, actively developed, and the software behind the zero-fee public instance many small miners already use.

If none of these fit and you still want a public pool business, start with the arithmetic in this guide rather than with a server. If they do fit, you have just saved months — and if what you actually wanted was a better pool rather than your own, how to join a mining pool is the shorter road.

FAQ

Infrastructure is the small number: one dedicated server with enough disk for a full node, a second one in another region before launch, and a domain. The costs that decide the project are the reserve if you offer PPS (hundreds of BTC on Bitcoin), your own time over several months, and legal review before you hold anyone’s coins.

Not realistically in 2026. The turnkey packages that made it possible — MPOS, NOMP, Miningcore — are abandoned or archived, and the maintained software covers stratum but not accounting or payouts. Expect to write and own the money-handling layer yourself.

Only at scale. At a 1% fee, a pool with 1 EH/s on Bitcoin — roughly five thousand machines — grosses about 0.14 BTC a month. Below that the fee income does not cover serious infrastructure, which is why most independent pools either serve a niche chain or sell something alongside the pool.

One where you can plausibly reach a percent or more of network hashrate, and where miners are underserved by existing pools. Check current network hashrate and the pools already running on each chain on our coin pages before committing.

It depends on your jurisdiction and on exactly how your payouts work. US guidance treats the proportional distribution of pool earnings as not being money transmission in itself, but that changes as soon as you add custody or exchange features. Get advice for your own country before launch, not after.

A stratum server accepting shares: an afternoon. Correct accounting, payouts, a dashboard, monitoring, two regions and a tested failover: a few months of real work, plus however long it takes to attract the hashrate that makes any of it worthwhile.

Sources

Related articles
Get your best deal
Reach out - we'll help you find the best fit