DocumentacióBitcoinPool de Mineria

Mining Pool

Executa la teva pròpia piscina minera privada amb Public Pool.

Pagina principal de Public Pool

Executa la teva pròpia piscina minera

Després que Microbolt executi el teu propi node totalment validat, actuï com a backend per al teu dispositiu de signatura de maquinari amb el servidor Electrum, puguis explorar la cadena de blocs en un navegador web, la darrera peça important del trencaclosques per millorar la privadesa i la sobirania financera és la teva pròpia piscina minera. Et permet connectar el teu propi nerdminer i/o bitaxe al teu Microbolt i intentar “trobar” un bloc a la Solo Bitcoin Mining Pool. Ja no necessites filtrar informació de la teva velocitat de hash a una piscina minera de tercers.

Preparatius

Instal·leu dependències

  • Instal·leu Node.js mitjançant el gestor de paquets apk.

Aquestes són dependències de construcció (es pot eliminar després de la instal·lació, si voleu)

$SU apk add --virtual .build-deps git npm

Aquestes són dependències en temps d’execució

$SU apk add nodejs-current

Creeu l’usuari/grup public-pool

$SU addgroup -S public-pool
$SU adduser \
    -S \
    -D \
    -H \
    -h /dev/null \
    -s /sbin/nologin \
    -G public-pool \
    -g public-pool \
    public-pool

Afegeix l’usuari public-pool al grup bitcoin

$SU adduser public-pool bitcoin

Afegiu també l’usuari satoshi al grup public-pool

$SU adduser satoshi public-pool && exec su -l satoshi

Servidor intermediari invers

A la secció de Seguretat, hem configurat un servidor intermediari invers. Ara podem afegir la configuració de Public Pool.

  • Habilita el servidor intermediari invers per encaminar el trànsit HTTPS extern xifrat internament cap a Public Pool
$SU $EDITOR /etc/caddy/sites/public-pool.caddy
/etc/caddy/sites/public-pool.caddy
:4040 {
    import tls
    root /var/www/public-pool-ui
 
    handle /api/* {
        reverse_proxy 127.0.0.1:23334
    }
 
    handle {
        try_files {path} {path}/ =404
        file_server
    }
}
  • Torna a carregar el Caddy
$SU rc-service caddy restart

Firewall

  • Configura el tallafoc per permetre les sol·licituds HTTPS entrants
$SU $EDITOR /etc/awall/optional/pool-ui.json
/etc/awall/optional/pool-ui.json
{
  "description": "Allow Public Pool UI SSL",
 
  "filter": [
    {
      "in": "internet",
      "out": "_fw",
      "service": { "proto": "tcp", "port": 4040 },
      "action": "accept",
      "conn-limit": { "count": 10, "interval": 60 }
    }
  ]
}
$SU $EDITOR /etc/awall/optional/pool-stratum.json
/etc/awall/optional/pool-stratum.json
{
  "description": "Allow Public Pool Stratum",
 
  "filter": [
    {
      "in": "internet",
      "out": "_fw",
      "service": { "proto": "tcp", "port": 23333 },
      "action": "accept",
      "conn-limit": { "count": 10, "interval": 60 }
    }
  ]
}
  • Habilitar-ho
$SU awall enable pool-ui pool-stratum
$SU awall activate

Instal·lació

Public Pool proporciona una interfície web lleugera i fàcil d’utilitzar per aconseguir just això: una piscina minera en solitari.

Backend

Obtenim l’últim commit del codi font del servidor Public Pool i l’instal·lem.

  • Baixa el codi font de l’últim commit del servidor Public Pool. Pots consultar la release page per veure si hi ha una versió més nova disponible. No obstant això, altres versions podrien no haver estat provades adequadament amb la resta de la configuració de Microbolt.
cd /tmp
git clone https://github.com/benjamin-wilson/public-pool.git && cd public-pool
git checkout 8ce057b3b51c33bf915f57f3a30822b449613276
  • Instal·leu totes les dependències mitjançant el Node Package Manager (NPM).
npm ci

La instal·lació pot trigar un temps. Pot ser que hi hagi moltes sortides confuses, però si veieu alguna cosa semblant a la següent, la instal·lació ha estat correcta:

⚠️

A data de 2024-09-01, hi ha com a mínim 23 vulnerabilitats que no es poden abordar sense fer canvis substancials que podrien afectar altres parts del programari

npm audit fix
output
23 vulnerabilities (2 low, 14 moderate, 6 high, 1 critical)

To address issues that do not require attention, run:
  npm audit fix

To address all issues possible (including breaking changes), run:
  npm audit fix --force

Some issues need review, and may require choosing
a different dependency.

Run `npm audit` for details.
  • Feu-ne una instal·lació permanent global
npm run build
mkdir ./dist/bin
printf "%s\n" \
    "#!/bin/sh" \
    "node \$@ /var/lib/public-pool/main" \
    > ./dist/bin/cli.sh
chmod +x ./dist/bin/cli.sh
$SU install -D -m 0660 -o public-pool -g public-pool ./.env.example /etc/public-pool/public-pool.env
$SU mv -f /tmp/public-pool/dist /var/lib/public-pool
$SU cp -R node_modules /var/lib/public-pool
$SU ln -s /var/lib/public-pool /usr/lib/node_modules/public-pool
$SU ln -s ../lib/node_modules/public-pool/bin/cli.sh /usr/bin/public-pool

Frontend

Obtenim l’últim commit del codi font del servidor Public Pool i l’instal·lem.

  • Baixa el codi font de l’últim commit del servidor Public Pool. Pots consultar la release page per veure si hi ha una versió més nova disponible. No obstant això, altres versions podrien no haver estat provades adequadament amb la resta de la configuració de Microbolt.
cd /tmp
git clone https://github.com/benjamin-wilson/public-pool-ui.git && cd public-pool-ui
git checkout 80081e337d3af829b0edf3990ad97ea430bd73d4
  • Instal·leu totes les dependències mitjançant el Node Package Manager (NPM).
npm ci
⚠️

A data de 2024-09-01, hi ha com a mínim 3 vulnerabilitats moderades que no es poden abordar sense fer canvis substancials que podrien afectar altres parts del programari

npm audit fix

La instal·lació pot trigar un temps. Pot ser que hi hagi moltes sortides confuses, però si veieu alguna cosa semblant a la següent, la instal·lació ha estat correcta:

output
3 moderate severity vulnerabilities

To address issues that do not require attention, run:
  npm audit fix

To address all issues, run:
  npm audit fix --force

Run `npm audit` for details.
  • Feu-ne una instal·lació permanent global
printf "%s\n" \
    "let path = window.location.origin + window.location.pathname;" \
    "path = path.endsWith('/') ? path.slice(0, -1) : path;" \
    "let stratumUrl = path.replace(/(^\\w+:|^)\\/\\//, '').replace(/:\\d+/, '');" \
    "" \
    "export const environment = {" \
    "    production: true," \
    "    API_URL: path," \
    "    STRATUM_URL: stratumUrl + ':23333'" \
    "};" \
    > ./src/environments/environment.prod.ts
npm run build
$SU mv -f ./dist/public-pool-ui /var/www/

Neteja

cd
rm -rf /tmp/public-pool*
$SU apk del .build-deps

Configuració

  • Activa qualsevol configuració retirant el # del principi de la línia.
$SU $EDITOR /etc/public-pool/public-pool.env
/etc/public-pool/public-pool.env
[...]
BITCOIN_RPC_URL=http://127.0.0.1
[...]
BITCOIN_RPC_COOKIEFILE="/var/lib/bitcoind/.cookie"
[...]
BITCOIN_ZMQ_HOST="tcp://127.0.0.1:28332"
[...]
API_PORT=23334
STRATUM_PORT=23333
[...]
POOL_IDENTIFIER="microbolt"
[...]
Accés remot a l'interficie web per Tor
  • Afegiu les línies següents a la secció de “location-hidden services” al fitxer torrc.
$SU $EDITOR /etc/tor/torrc
/etc/tor/torrc
# Hidden Service Public Pool
HiddenServiceDir /var/lib/tor/public-pool/
HiddenServiceVersion 3
HiddenServicePoWDefensesEnabled 1
HiddenServicePort 443 127.0.0.1:4040
  • Torneu a carregar la configuració de Tor i obteniu la vostra adreça de connexió.
$SU rc-service tor reload
$SU cat /var/lib/tor/public-pool/hostname
output
abcdefg..............xyz.onion
  • Ara hauries de poder connectar-te de forma remota al teu Public Pool a través de Tor utilitzant el teu nom d’amfitrió

Inici automàtic a l’arrencada

Ara ens assegurarem que el nostre Public Pool s’iniciï com a servei a l’ordinador perquè estigui sempre en execució.

  • Creeu la unitat init.d de Public Pool i copieu/enganxeu la configuració següent. Guardar i sortir.
$SU $EDITOR /etc/init.d/public-pool
/etc/init.d/public-pool
#!/sbin/openrc-run
 
: ${PUBLICPOOL_ENVFILE:=/etc/public-pool/public-pool.env}
: ${PUBLICPOOL_WEBUI:=/var/www/public-pool-ui}
: ${PUBLICPOOL_DATADIR:=/var/lib/public-pool}
: ${PUBLICPOOL_LOGDIR:=/var/log/public-pool}
: ${PUBLICPOOL_USER:=public-pool}
: ${PUBLICPOOL_GROUP:=public-pool}
: ${PUBLICPOOL_BIN:=/usr/bin/public-pool}
: ${PUBLICPOOL_OPTS=${PUBLICPOOL_OPTS}}
: ${PUBLICPOOL_SIGTERM_TIMEOUT:=600}
 
PUBLICPOOL_PIDDIR="/run/public-pool"
 
directory="${PUBLICPOOL_DATADIR}"
required_files="${PUBLICPOOL_ENVFILE}"
pidfile="${PUBLICPOOL_PIDDIR}/${SVCNAME}.pid"
 
name="Public Pool"
description="Fully Open Source Solo Bitcoin Mining Pool"
 
command="${PUBLICPOOL_BIN}"
command_args="--env-file=${PUBLICPOOL_ENVFILE}
              ${PUBLICPOOL_OPTS}"
command_user="${PUBLICPOOL_USER}:${PUBLICPOOL_GROUP}"
command_background="true"
 
start_stop_daemon_args="--stdout ${PUBLICPOOL_LOGDIR}/debug.log
                        --stderr ${PUBLICPOOL_LOGDIR}/debug.log"
 
depend() {
    need bitcoind
}
 
start_pre() {
    checkpath --file      --mode 0660 --owner "${command_user}" "${PUBLICPOOL_ENVFILE}"
    checkpath --directory --mode 0750 --owner "${command_user}" "${PUBLICPOOL_DATADIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${PUBLICPOOL_LOGDIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${PUBLICPOOL_PIDDIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${PUBLICPOOL_WEBUI}"
    checkconfig
}
 
checkconfig() {
    if ! grep -qs '^BITCOIN_RPC_COOKIEFILE=' "${PUBLICPOOL_ENVFILE}"
    then
        eerror ""
        eerror "ERROR: You must set a BITCOIN_RPC_COOKIEFILE path"
        eerror "to run Public pool."
        eerror "The setting must appear in ${PUBLICPOOL_ENVFILE}"
        eerror ""
        return 1
    fi
}
 
stop() {
    ebegin "Stopping ${SVCNAME}"
    pkill -TERM -P "$(cat ${pidfile})"
    start-stop-daemon \
        --stop \
        --pidfile="${pidfile}" \
        --retry="${PUBLICPOOL_SIGTERM_TIMEOUT}" \
        --exec="${PUBLICPOOL_BIN}"
    eend $?
}
  • Habilita el permís d’execució
$SU chmod +x /etc/init.d/public-pool

Habilita logrotate

  • Introduïu la configuració següent completa. Guardar i sortir
$SU $EDITOR /etc/logrotate.d/public-pool
/etc/logrotate.d/public-pool
/var/log/public-pool/*.log {
    weekly
    missingok
    rotate 104
    compress
    delaycompress
    notifempty
    create 0640 public-pool public-pool
    sharedscripts
    postrotate
        kill -HUP `cat /run/public-pool/public-pool.pid`
    endscript
}
  • Prova
$SU logrotate /etc/logrotate.d/public-pool --debug

Activa i inicia Public Pool

$SU rc-update add public-pool
$SU rc-service public-pool start
🎉

Felicitats! Ara tens Public Pool funcionant

  • Comproveu el registre per veure la sortida de Public Pool. Sortiu amb Ctrl-C
tail -f /var/log/public-pool/debug.log

Per al futur: actualització de Public Pool

⚠️

No hi ha cap versió existent de public-pool encara, així que actualitza-la quan hagi passat prou temps o segueix el projecte per veure si hi ha alguna novetat interessant

Torneu a seguir la pàgina Pool de Mineria substituint el valor de la variable d’entorn VERSION=x.xx per l’últim si encara no s’ha modificat en aquesta guia.

  • Actualitzeu la configuració de Public Pool si cal (vegeu les notes de la versió)
$SU $EDITOR /etc/public-pool/.env
  • Reinicieu el servei per aplicar els canvis
$SU rc-service public-pool restart