Mempool Space
El Mempool és un visualitzador/explorador de la blockchain i mempool de Bitcoin autoallotjat. Busca les teves operacions en cadena i estima les comissions de les transaccions sense cap fuita de privacitat.
Preparacions
Indexació de transaccions
Perquè el Mempool Space funcioni, necessiteu el vostre node complet per indexar totes les transaccions.
- Si heu seguit aquesta guia, el paràmetre d’índex de transaccions ja està
habilitat (
txindex=1
) i podeu saltar a la secció següent. - Si no és així, cal que configureu el paràmetre
txindex=1
al fitxer de configuració del vostre client Bitcoin (bitcoin.conf
): Configuració del node Bitcoin. - Després d’afegir el paràmetre, reinicieu el client Bitcoin, que ara indexarà tota la cadena de blocs
$SU rc-service bitcoind restart
Tingueu en compte que la reindexació pot trigar més d’un dia. Podeu seguir el progrés utilitzant
tail -f /var/log/bitcoind/debug.log
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 cargo git gnupg npm rsync
Aquestes són dependències en temps d’execució
$SU apk add mariadb mariadb-client nodejs-current
Creeu l’usuari/grup mempool
$SU addgroup -S mempool
$SU adduser \
-S \
-D \
-H \
-h /dev/null \
-s /sbin/nologin \
-G mempool \
-g mempool \
mempool
Afegeix l’usuari mempool
al grup bitcoin
$SU adduser mempool bitcoin
Afegiu també l’usuari satoshi
al grup mempool
$SU adduser satoshi mempool && exec su -l satoshi
Servidor intermediari invers
A la secció de Seguretat, hem configurat un servidor intermediari invers. Ara podem afegir la configuració de Mempool Space.
- Habilita el servidor intermediari invers per encaminar el trànsit HTTPS extern xifrat internament cap a Mempool Space
$SU $EDITOR /etc/caddy/sites/mempool-space.caddy
:4081 {
import tls
root /var/www/mempool/browser
handle /api/v1/* {
reverse_proxy 127.0.0.1:8999
}
handle /api/* {
uri replace /api/ /api/v1/
reverse_proxy 127.0.0.1:8999
}
handle {
map {header.accept-language} {header_lang} {
default "en-US"
~^ar "ar"
~^cs "cs"
~^da "da"
~^de "de"
~^en "en-US"
~^es "es"
~^fa "fa"
~^fi "fi"
~^fr "fr"
~^he "he"
~^hi "hi"
~^hr "hr"
~^hu "hu"
~^it "it"
~^ja "ja"
~^ka "ka"
~^ko "ko"
~^lt "lt"
~^mk "mk"
~^nb "nb"
~^ne "ne"
~^nl "nl"
~^pl "pl"
~^pt "pt"
~^ro "ro"
~^ru "ru"
~^sl "sl"
~^sv "sv"
~^th "th"
~^tr "tr"
~^uk "uk"
~^vi "vi"
~^zh "zh"
}
map {cookie.lang} {lang} {
default {header_lang}
ar "ar"
cs "cs"
da "da"
de "de"
en "en-US"
es "es"
fa "fa"
fi "fi"
fr "fr"
he "he"
hi "hi"
hr "hr"
hu "hu"
it "it"
ja "ja"
ka "ka"
ko "ko"
lt "lt"
mk "mk"
nb "nb"
ne "ne"
nl "nl"
pl "pl"
pt "pt"
ro "ro"
ru "ru"
sl "sl"
sv "sv"
th "th"
tr "tr"
uk "uk"
vi "vi"
zh "zh"
}
header {
Cache-Control "public, no-transform, max-age=1800"
Vary "Accept-Language, Cookie"
}
@lang-override path_regexp ^/([a-z]{2})/
handle @lang-override {
try_files {path} /{re.lang-override.1}/index.html /en-US{path} /en-US/index.html
}
handle {
try_files {path} /{lang}{path} /en-US{path} /{lang}/index.html /en-US/index.html
}
file_server
}
}
- Torna a carregar el Caddy
$SU rc-service caddy reload
Firewall
- Configura el tallafoc per permetre les sol·licituds entrants
$SU $EDITOR /etc/awall/optional/mempool.json
{
"description": "Allow Mempool Space SSL",
"filter": [
{
"in": "internet",
"out": "_fw",
"service": { "proto": "tcp", "port": 4081 },
"action": "accept",
"conn-limit": { "count": 10, "interval": 60 }
}
]
}
- Habilitar-ho
$SU awall enable mempool
$SU awall activate
Instal·lació
Descarrega el codi font
Obtenim la darrera versió del codi font de Mempool Space i l’instal·lem.
- Baixeu el codi font de la darrera versió de Mempool Space. Podeu consultar la pàgina de llançament per veure si hi ha disponible una versió més recent. Tanmateix, és possible que altres versions no s’hagin provat correctament amb la resta de la configuració de Microbolt.
cd /tmp
VERSION=3.0.0
git clone --branch v$VERSION https://github.com/mempool/mempool.git && cd mempool
Comprovació de la signatura
- Per a evitar utilitzar un codi font incorrecte, verifiqueu que el llançament ha estat correctament signat almenys per un dels desenvolupadors principals wiz.
wget -qO- https://github.com/wiz.gpg | gpg --import
git verify-tag v$VERSION
MariaDB
MariaDB és una base de dades relacional de codi obert.
- Primer cal crear bases de dades inicials i iniciar el servei
$SU rc-service mariadb setup
$SU rc-service mariadb start
- Aquestes ordres us permeten crear una base de dades mempool i concedir
privilegis a l’usuari
mempool
the directament des de la línia d’ordres
$SU mysql -e "create database mempool;"
$SU mysql -e "grant all privileges on mempool.* to 'mempool'@'localhost' identified via unix_socket;"
Backend
- Instal·la les dependències del backend i construeix el projecte
cd /tmp/mempool/backend
npm ci --omit=dev --omit=optional
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:
3 high severity vulnerabilities
To address all issues, run:
npm audit fix
Run `npm audit` for details.
A data de 2024-08-31
, hi ha com a mínim 3 vulnerabilitats que no es poden
abordar sense fer canvis substancials que podrien afectar altres parts del
programari
npm audit fix
- Feu-ne una instal·lació permanent global
npm run package
mkdir ./package/bin
printf "%s\n" \
"#!/bin/sh" \
"node /var/lib/mempool/index.js" \
> ./package/bin/cli.sh
chmod +x ./package/bin/cli.sh
$SU install -D -m 0660 -o mempool -g mempool ./mempool-config.sample.json /etc/mempool/mempool-config.json
$SU mv -f /tmp/mempool/backend/package /var/lib/mempool
$SU ln -s /var/lib/mempool /usr/lib/node_modules/mempool
$SU ln -s ../lib/node_modules/mempool/bin/cli.sh /usr/bin/mempool
Frontend
- Instal·la les dependències del frontend i construeix el projecte
cd /tmp/mempool/frontend
npm ci --omit=dev --omit=optional
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:
16 vulnerabilities (2 low, 4 moderate, 10 high)
To address issues that do not require attention, run:
npm audit fix
To address all issues (including breaking changes), run:
npm audit fix --force
Run `npm audit` for details.
A data de 2024-08-31
, hi ha com a mínim 16 vulnerabilitats que no es poden
abordar sense fer canvis substancials que podrien afectar altres parts del
programari
npm audit fix --force
- Feu-ne una instal·lació permanent global
npm run build
$SU mv -f ./dist/mempool /var/www/
Neteja
cd
rm -rf /tmp/mempool
$SU apk del .build-deps
Configuració
- Comprova el fitxer de configuració i canvia els valors ressaltats
$SU $EDITOR /etc/mempool/mempool-config.json
[...]
"INDEXING_BLOCKS_AMOUNT": 52560,
[...]
"STDOUT_LOG_MIN_PRIORITY": "info",
[...]
"CORE_RPC": {
[...]
"USERNAME": "",
"PASSWORD": "",
[...]
"COOKIE": true,
"COOKIE_PATH": "/var/lib/bitcoind/.cookie"
},
"ESPLORA": {
"REST_API_URL": "",
"UNIX_SOCKET_PATH": "",
[...]
"SECOND_CORE_RPC": {
"HOST": "",
[...]
"DATABASE": {
[...]
"SOCKET": "/var/run/mysqld/mysqld.sock",
[...]
"PASSWORD": "",
[...]
"SOCKS5PROXY": {
"ENABLED": true,
[...]
Redis
Per fer us de la memòria cau de Redis, cal instal·lar el paquet redis
i
configurar el fitxer de configuració de Mempool Space.
$SU apk add redis
[...]
"REDIS": {
"ENABLED": true,
"UNIX_SOCKET_PATH": "/var/run/redis/redis.sock",
[...]
Accés remot per Tor
Per utilitzar el vostre explorador de cadena de blocs quan esteu en remot, podeu crear fàcilment un servei ocult Tor al Microbolt i accedir al Mempool Space amb el navegador Tor des de qualsevol dispositiu.
- Afegiu les tres línies següents a la secció “location-hidden services” al
fitxer
torrc
.
$SU $EDITOR /etc/tor/torrc
# Hidden Service Mempool Space
HiddenServiceDir /var/lib/tor/mempool/
HiddenServiceVersion 3
HiddenServicePoWDefensesEnabled 1
HiddenServicePort 443 127.0.0.1:4081
- 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/mempool/hostname
abcdefg..............xyz.onion
- Ara hauríeu de poder connectar-vos al vostre Mempool Space de forma remota mitjançant Tor mitjançant el vostre nom d’amfitrió
Inici automàtic a l’arrencada
Ara ens assegurarem que el nostre explorador de cadena de blocs s’iniciï com a servei a l’ordinador perquè estigui sempre en execució.
- Creeu la unitat init.d de Mempool Space i copieu/enganxeu la configuració següent. Guardar i sortir.
$SU $EDITOR /etc/init.d/mempool
#!/sbin/openrc-run
: ${MEMPOOL_CONFIGFILE:=/etc/mempool/mempool-config.json}
: ${MEMPOOL_DATADIR:=/var/lib/mempool}
: ${MEMPOOL_LOGDIR:=/var/log/mempool}
: ${MEMPOOL_USER:=mempool}
: ${MEMPOOL_GROUP:=mempool}
: ${MEMPOOL_BIN:=/usr/bin/mempool}
: ${MEMPOOL_OPTS=${MEMPOOL_OPTS}}
: ${MEMPOOL_SIGTERM_TIMEOUT:=600}
MEMPOOL_PIDDIR="/run/mempool"
name="Mempool Space"
description="A self-hosted Bitcoin blockchain and mempool visualizer/explorer"
directory="${MEMPOOL_DATADIR}"
required_files="${MEMPOOL_CONFIGFILE}"
pidfile="${MEMPOOL_PIDDIR}/${SVCNAME}.pid"
retry="${MEMPOOL_SIGTERM_TIMEOUT}"
command="${MEMPOOL_BIN}"
command_args="${MEMPOOL_OPTS}"
command_user="${MEMPOOL_USER}:${MEMPOOL_GROUP}"
command_background="true"
start_stop_daemon_args="--env MEMPOOL_CONFIG_FILE=${MEMPOOL_CONFIGFILE}
--stdout ${MEMPOOL_LOGDIR}/debug.log
--stderr ${MEMPOOL_LOGDIR}/debug.log"
depend() {
need bitcoind
need mariadb
checkdepend REDIS redis
if service_started fulcrum; then
need fulcrum
elif service_started electrs; then
need electrs
else
if service_exists fulcrum; then
need fulcrum
elif service_exists electrs; then
need electrs
else
eerror "Neither fulcrum nor electrs is installed or started"
return 1
fi
fi
}
checkdepend() {
if sed -n '/^[[:space:]]*"'${1}'": {/,/^[[:space:]]*}/p' "${MEMPOOL_CONFIGFILE}" | grep -qs '"ENABLED": true'; then
need "${2:-$1}"
fi
}
service_exists() {
rc-service --list | grep -q "^$1$"
}
start_pre() {
checkpath --file --mode 0660 --owner "${command_user}" "${MEMPOOL_CONFIGFILE}"
checkpath --directory --mode 0750 --owner "${command_user}" "${MEMPOOL_DATADIR}"
checkpath --directory --mode 0755 --owner "${command_user}" "${MEMPOOL_LOGDIR}"
checkpath --directory --mode 0755 --owner "${command_user}" "${MEMPOOL_PIDDIR}"
}
stop() {
ebegin "Stopping ${SVCNAME}"
pkill -TERM -P "$(cat ${pidfile})" > /dev/null 2>&1
start-stop-daemon \
--stop \
--pidfile="${pidfile}" \
--retry="${MEMPOOL_SIGTERM_TIMEOUT}" \
--exec="${MEMPOOL_BIN}"
eend $?
}
- Habilita el permís d’execució
$SU chmod +x /etc/init.d/mempool
Habilita logrotate
- Introduïu la configuració següent completa. Guardar i sortir
$SU $EDITOR /etc/logrotate.d/mempool
/var/log/mempool/*.log {
weekly
missingok
rotate 104
compress
delaycompress
notifempty
create 0640 mempool mempool
sharedscripts
postrotate
kill -HUP `cat /run/mempool/mempool.pid`
endscript
}
- Prova
$SU logrotate /etc/logrotate.d/mempool --debug
Activa i inicia Mempool Space
$SU rc-update add mempool
$SU rc-service mempool start
- Comproveu el registre per veure la sortida de Mempool Space. Sortiu amb
Ctrl-C
tail -f /var/log/mempool/debug.log
- Ara podeu accedir al vostre propi Mempool Space des de la vostra xarxa local navegant a https://nakamoto01:4081 (o la vostra adreça IP equivalent).
Per al futur: actualització de Mempool Space
Torneu a seguir la pàgina Mempool Space 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 Mempool Space si cal (vegeu les notes de la versió)
$SU $EDITOR /etc/mempool/mempool-config.json
- Reinicieu el servei per aplicar els canvis
$SU rc-service mempool restart