Fulcrum

Fulcrum és un servidor SPV ràpid i àgil per a Bitcoin Cash, Bitcoin BTC i Litecoin creat per Calin Culianu. Es pot utilitzar com a alternativa a Electrs pel seu rendiment, com podem veure a la comparació de Craig Raw de servidors.

Preparacions

Instal·leu dependències

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

$SU apk add --virtual .build-deps autoconf g++ git gnupg jemalloc-dev lz4-dev \
    make pkgconf qt6-qtbase-dev rocksdb-dev zeromq-dev

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

$SU apk add jemalloc libzmq qt6-qtbase rocksdb

Creeu l’usuari/grup fulcrum

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

Afegeix l’usuari fulcrum al grup bitcoin

$SU adduser fulcrum bitcoin

Afegiu també l’usuari satoshi al grup fulcrum

$SU adduser satoshi fulcrum

Servidor intermediari invers

A la secció Seguretat, ja hem configurat un servidor intermediari invers. Ara podem afegir la configuració del servidor Electrum.

  • Habiliteu el servidor intermediari invers per afegir xifratge SSL/TLS a la comunicació del servidor Electrum. Creeu el fitxer de configuració i enganxeu el contingut següent
$SU $EDITOR /etc/caddy/streams/electrum.caddy
/etc/caddy/streams/electrum.caddy
:50002 {
        route {
                tls 
                proxy {
                        upstream 127.0.0.1:50001
                }
        }
}
  • Torna a carregar el Caddy
$SU rc-service caddy reload

Tallafoc

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

Instal·lació

Una manera fàcil i eficient d’executar un servidor Electrum és utilitzar Fulcrum, el servidor Electrum ràpid i àgil. No hi ha binaris compatibles disponibles, així que compilarem l’aplicació nosaltres mateixos.

Descarrega el codi font

Obtenim l’última versió del codi font de Fulcrum, el verifiquem, el compilem en un binari executable i l’instal·lem.

  • Baixeu el codi font de la darrera versió de Fulcrum. 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=1.11.1
git clone --branch v$VERSION https://github.com/cculianu/Fulcrum.git && cd Fulcrum

Comprovació de la signatura

  • Per evitar l’ús d’un codi font maliciós, verifiqueu que la versió hagi estat signada correctament pel desenvolupador principal Calin Culianu.
url="https://raw.githubusercontent.com/Electron-Cash/keys-n-hashes/master/pubkeys/calinkey.txt"
wget -qO- "$url" | gpg --import
git verify-commit v$VERSION

Configurar, compilar i instal·lar

  • Ara compileu el codi font en un binari executable i instal·leu-lo.
qmake6 \
    Fulcrum.pro \
    -o build/
CC=gcc \
CXX=g++ \
make -C build
$SU install -m 0755 -o root -g root -t /usr/bin ./build/Fulcrum
$SU install -m 0755 -o root -g root -t /usr/bin ./FulcrumAdmin
$SU install -D -m 0660 -o fulcrum -g fulcrum ./doc/fulcrum-example-config.conf /etc/fulcrum/fulcrum.conf
  • Baixeu el banner personalitzat de Fulcrum basat en Microbolt. Crea el teu propi si vols aquí
$SU wget \
    https://gist.githubusercontent.com/doitwithnotepad/\
4472a92414223672d9ab4c3b55d0cd23/raw/ecb086f1b8cca49f22929778ac167b35915842e7/\
banner.txt \
    -O /etc/fulcrum/banner.txt

”Strip” els binaris instal·lats

$SU strip -v /usr/bin/Fulcrum

Neteja

cd
rm -rf /tmp/Fulcrum
$SU apk del .build-deps

Configuració

  • Modifiqueu el fitxer de configuració amb el contingut següent
$SU $EDITOR /etc/fulcrum/fulcrum.conf
/etc/fulcrum/fulcrum.conf
[...]
#datadir = /path/to/a/dir
[...]
#rpcuser = Bob_The_Banker
[...]
#rpcpassword = hunter1
[...]
rpccookie = /var/lib/bitcoind/.cookie
[...]
tcp = 0.0.0.0:50001
[...]
banner = /etc/fulcrum/banner.txt
[...]
peering = false
[...]
Dispositius de baix rendiment
/etc/fulcrum/fulcrum.conf
[...]
bitcoind_clients = 1
[...]
bitcoind_timeout = 600
[...]
db_max_open_files = # RAM: 4GB -> 200 | 8GB -> 400
[...]
db_mem = 1024.0
[...]
worker_threads = 1
[...]
Accés remot per Tor

Per utilitzar el vostre servidor Electrum quan esteu en remot, podeu crear fàcilment un servei ocult Tor. D’aquesta manera, podeu connectar la cartera BitBoxApp o Electrum també de manera remota, o fins i tot compartir els detalls de la connexió amb amics i familiars. Tingueu en compte que el dispositiu remot també ha de tenir Tor instal·lat.

  • Afegiu les línies següents a la secció de “serveis ocults per la ubicació” al fitxer torrc.
$SU $EDITOR /etc/tor/torrc
/etc/tor/torrc
# Hidden Service Electrum
HiddenServiceDir /var/lib/tor/electrum/
HiddenServiceVersion 3
HiddenServicePoWDefensesEnabled 1
HiddenServicePort 50002 127.0.0.1:50002
  • 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/electrum/hostname
output
abcdefg..............xyz.onion
  • Ara hauríeu de poder connectar-vos al vostre servidor Electrum de manera remota mitjançant Tor, el vostre nom d’amfitrió i el port 50002

Inici automàtic a l’arrencada

Fulcrum s’ha d’iniciar automàticament a l’arrencada del sistema.

  • Creeu la unitat Fulcrum init.d i copieu/enganxeu la configuració següent
$SU $EDITOR /etc/init.d/fulcrum
/etc/init.d/fulcrum
#!/sbin/openrc-run
 
: ${FULCRUM_CONFIGFILE:=/etc/fulcrum/fulcrum.conf}
: ${FULCRUM_DATADIR:=/var/lib/fulcrum}
: ${FULCRUM_LOGDIR:=/var/log/fulcrum}
: ${FULCRUM_USER:=fulcrum}
: ${FULCRUM_GROUP:=fulcrum}
: ${FULCRUM_BIN:=/usr/bin/Fulcrum}
: ${FULCRUM_ADMINPORT:=8000}
: ${FULCRUM_OPTS=${FULCRUM_OPTS}}
: ${FULCRUM_SIGTERM_TIMEOUT:=600}
 
FULCRUM_PIDDIR="/run/fulcrum"
 
required_files="${FULCRUM_CONFIGFILE}"
pidfile="${FULCRUM_PIDDIR}/${SVCNAME}.pid"
retry="${FULCRUM_SIGTERM_TIMEOUT}"
 
name="Fulcrum"
description="A fast & nimble SPV Server for BCH, BTC, and LTC"
 
command="${FULCRUM_BIN}"
command_args="${FULCRUM_CONFIGFILE}
              --datadir ${FULCRUM_DATADIR}
              --admin ${FULCRUM_ADMINPORT}
              --pidfile ${pidfile}
              ${FULCRUM_OPTS}"
command_user="${FULCRUM_USER}:${FULCRUM_GROUP}"
command_background="true"
 
start_stop_daemon_args="--stdout ${FULCRUM_LOGDIR}/debug.log
                        --stderr ${FULCRUM_LOGDIR}/debug.log"
 
depend() {
    use bitcoind
    after bitcoind
}
 
start_pre() {
    checkpath --file      --mode 0660 --owner "${command_user}" "${FULCRUM_CONFIGFILE}"
    checkpath --directory --mode 0750 --owner "${command_user}" "${FULCRUM_DATADIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${FULCRUM_LOGDIR}"
    checkpath --directory --mode 0755 --owner "${command_user}" "${FULCRUM_PIDDIR}"
    checkconfig
}
 
start_post() {
    checkpath --file --owner "${command_user}" "${pidfile}"
}
 
checkconfig() {
    if ! grep -qs '^rpccookie = ' "${FULCRUM_CONFIGFILE}"
    then
        eerror ""
        eerror "ERROR: You must set a rpccookie path to run Fulcrum."
        eerror "The setting must appear in ${FULCRUM_CONFIGFILE}"
        eerror ""
        return 1
    fi
}
  • Habilita el permís d’execució
$SU chmod +x /etc/init.d/fulcrum

Habilita logrotate

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

Activa i inicia Fulcrum

$SU rc-update add fulcrum
$SU rc-service fulcrum start
  • Comproveu el registre per veure la sortida de Fulcrum. Sortiu amb Ctrl-C
tail -f /var/log/fulcrum/debug.log

Ara Fulcrum indexarà tota la cadena de blocs de Bitcoin perquè pugui proporcionar tota la informació necessària als dispositius de signatura. Amb això, els dispositius de signatura que utilitzeu ja no necessiten connectar-se a cap servidor de tercers per comunicar-se amb la xarxa peer-to-peer de Bitcoin.

Per al futur: actualització de Fulcrum

Torneu a seguir la pàgina Fulcrum 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 Fulcrum si cal (vegeu les notes de la versió)
$SU $EDITOR /etc/fulcrum/fulcrum.conf
  • Reinicieu el servei per aplicar els canvis
$SU rc-service fulcrum restart