No description
  • TypeScript 99.1%
  • Dockerfile 0.9%
Find a file
mutatrum a04539b809
Some checks failed
Build and scan container for vulnerabilities with Trivy / Build and scan images (push) Has been cancelled
Update image when Dockerfile is changed / Rebuild Container with the latest base image (push) Has been cancelled
feat(vardiff): round suggested difficulty instead of snapping to powers of two
2026-09-09 23:45:26 +02:00
.github/workflows Dockerfile improvements and automatic Github Actions builds (#14) 2023-12-12 20:11:36 -05:00
.vscode RPC load reduction 2023-11-24 14:56:35 -05:00
config killDeadClients 2023-08-06 23:36:41 -04:00
full-setup fix: use bitcoin default port for zmqpubhashblock port 2026-09-09 16:02:52 +02:00
secrets add https and pem files (for anyone to use, fast setup) 2023-08-03 17:16:16 -04:00
src feat(vardiff): round suggested difficulty instead of snapping to powers of two 2026-09-09 23:45:26 +02:00
test Migrate postgresql improvements to sqlite 2026-06-05 10:48:42 -04:00
.dockerignore chore: add .env, DB/, and dist/ to .dockerignore 2026-09-09 16:49:05 +02:00
.env.example fix: use bitcoin default port for zmqpubhashblock port 2026-09-09 16:02:52 +02:00
.eslintrc.js init 2023-06-09 22:40:35 -04:00
.gitignore Adds a full setup (bitcoin core + public-pool) (#10) 2023-11-28 08:07:57 -05:00
.npmrc Migrate postgresql improvements to sqlite 2026-06-05 10:48:42 -04:00
.prettierrc init 2023-06-09 22:40:35 -04:00
docker-compose.yml some changes for docker setup (#9) 2023-11-19 14:16:50 -05:00
Dockerfile Migrate postgresql improvements to sqlite 2026-06-05 10:48:42 -04:00
LICENSE.txt cleanup and change sewit witness output to its own tx 2023-07-02 19:22:33 -04:00
nest-cli.json init 2023-06-09 22:40:35 -04:00
package-lock.json Sync package lock for Node 24 2026-06-05 11:48:35 -04:00
package.json Migrate postgresql improvements to sqlite 2026-06-05 10:48:42 -04:00
README.md fix: use bitcoin default port for zmqpubhashblock port 2026-09-09 16:02:52 +02:00
tsconfig.build.json init 2023-06-09 22:40:35 -04:00
tsconfig.json class-transformer work 2023-06-17 10:10:14 -04:00

Description

A Nestjs and Typescript Bitcoin stratum mining server.

Installation

$ npm install

create an new .env file in the root directory and configure it with the parameters in .env.example

Running the app

# development
$ npm run start

# watch mode
$ npm run start:dev

# production build
$ npm run build

Test

# unit tests
$ npm run test

# test coverage
$ npm run test:cov

Web interface

See public-pool-ui

Deployment

Install pm2 (https://pm2.keymetrics.io/)

$ pm2 start dist/main.js

When running the worker app in PM2 cluster mode, start the PM2 daemon with OS-level connection scheduling. The environment variable must be present when the PM2 daemon starts, not only in the worker configuration.

$ NODE_CLUSTER_SCHED_POLICY=none pm2 start ecosystem.config.js

Cluster-mode connection dropping requires Node.js 22.12.0 or newer.

STRATUM_MAX_CONNECTIONS_PER_LISTENER is enforced per worker and Stratum port. Size it using the busiest port: worker count * limit. For example, 28 workers with the default limit of 10000 allow up to 280000 connections on one port.

Docker

Build container:

$ docker build -t public-pool .

Run container:

$ docker container run --name public-pool --rm -p 3333:3333 -p 3334:3334 -p 8332:8332 -v .env:/public-pool/.env public-pool

Docker Compose

Build container:

$ docker compose build

Run container:

$ docker compose up -d

The docker-compose binds to 127.0.0.1 by default. To expose the Stratum services on your server change:

    ports:
-      - "127.0.0.1:3333:3333/tcp"
-      - "127.0.0.1:3334:3334/tcp"
+      - "3333"
+      - "3334"

note: To successfully connect to Bitcoin Core, configure your bitcoin.conf:

# Allow RPC access from the container/host network:
rpcallowip=172.16.0.0/12

# Publish real-time block notifications via ZeroMQ (required for instant block detection):
zmqpubhashblock=tcp://0.0.0.0:28332