Bitcoin Core
Instal·lem Bitcoin Core, la implementació de client de referència de la xarxa Bitcoin.
Preparacions
L’aplicació Bitcoin Core s’executarà en segon pla com a dimoni i utilitzarà
l’usuari separat bitcoin
per motius de seguretat. Aquest usuari no té drets
d’administrador i no pot canviar la configuració del sistema.
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 automake boost-dev clang chrpath \
file gnupg libevent-dev libtool make pkgconf zeromq-dev
Aquestes són dependències en temps d’execució
$SU apk add libevent libsodium libstdc++ libzmq
Creeu l’usuari/grup bitcoin
$SU addgroup -S bitcoin
$SU adduser \
-S \
-D \
-H \
-h /dev/null \
-s /sbin/nologin \
-G bitcoin \
-g bitcoin \
bitcoin
Afegiu també l’usuari satoshi
al grup bitcoin
$SU adduser satoshi bitcoin
Afegiu l’usuari bitcoin
al grup tor
Això permet a l’usuari bitcoin
utilitzar el port de control i configurar Tor
directament
$SU adduser bitcoin tor
Creeu un enllaç simbòlic bitcoin a la casa de satoshi
ln -s /var/lib/bitcoind "$HOME/.bitcoin"
Instal·lació
Hi ha un apk empaquetat de bitcoin als repositoris Alpine, però Microbolt recomana instal·lar bitcoin des del codi font per aplicar sempre pedaços anti-ordinals.
Baixem l’últim codi font de Bitcoin Core i comparem aquest fitxer amb la suma de verificació signada i marcada amb l’hora. Aquesta és una precaució per assegurar-nos que es tracta d’una versió oficial i no d’una versió maliciosa que intenta robar-nos els diners.
Descarrega el codi font
- Inicieu sessió com a
satoshi
i canvieu a un directori temporal que s’esborrarà en reiniciar
cd /tmp
- Establiu una variable d’entorn de versió temporal a la instal·lació
VERSION=28.0
- Obteniu el codi font i les signatures més recents
wget https://bitcoincore.org/bin/bitcoin-core-$VERSION/bitcoin-$VERSION.tar.gz \
https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS \
https://bitcoincore.org/bin/bitcoin-core-$VERSION/SHA256SUMS.asc
Comprovació de la suma de comprovació
- Comproveu que la suma de comprovació de referència del fitxer
SHA256SUMS
coincideixi amb la suma de comprovació calculada per vosaltres
grep bitcoin-$VERSION.tar.gz SHA256SUMS | sha256sum -c
bitcoin-$VERSION.tar.gz: OK
Comprovació de la signatura
Els llançaments de Bitcoin estan signats per diverses persones, cadascuna utilitzant la seva pròpia clau. Per verificar la validesa d’aquestes signatures, primer heu d’importar les claus públiques corresponents a la vostra base de dades de claus GPG.
- La següent comanda baixa i importa automàticament totes les signatures de les certificacions de llançament de Bitcoin Core (Guix) repositori
wget -qO- \
"https://api.github.com/repositories/355107265/contents/builder-keys" |\
grep download_url |\
grep -oE "https://[a-zA-Z0-9./-]+" |\
while read url; do \
wget -qO- "$url" |\
gpg --import \
; done
- Verifiqueu que el fitxer de sumes de comprovació estigui signat criptogràficament amb les claus de signatura de la versió. L’ordre següent imprimeix comprovacions de signatura per a cadascuna de les claus públiques que van signar les sumes de comprovació
gpg --verify SHA256SUMS.asc
- Comproveu que almenys algunes signatures mostrin el text següent
gpg: Good signature from...
Primary key fingerprint:...
Comprovació de la marca de temps
El fitxer de suma de control d’origen també està marcat de temps amb la cadena de blocs de Bitcoin mitjançant el protocol OpenTimestamps, demostrant que el fitxer existia abans d’algun moment. Verifiquem aquesta marca de temps. Al vostre ordinador local, descarregueu el fitxer de sumes de comprovació i la seva prova de marca de temps:
- Al navegador, obriu el lloc web d’OpenTimestamps
- A la secció “Stamp and verify”, deixeu anar o carregueu el fitxer de prova SHA256SUMS.ots descarregat al quadre de punts
- Al quadre següent, deixeu anar o carregueu el fitxer SHA256SUMS
- Si es verifiquen les marques de temps, hauríeu de veure el missatge següent. La marca de temps demostra que el fitxer de sumes de comprovació existia a la data de llançament de l’última versió de Bitcoin Core
La captura de pantalla següent és només un exemple d’una de les versions:
Extreu la font
Si esteu satisfet amb les comprovacions de la suma de verificació, la signatura i la marca de temps, extreu el codi font de Bitcoin Core
tar xzf bitcoin-$VERSION.tar.gz && cd bitcoin-$VERSION
Aplicar pegats
- Ordisrespector
sed '/stack.push_back(vchPushValue);/a \
if ((flags & SCRIPT_VERIFY_DISCOURAGE_UPGRADABLE_NOPS) && opcode == OP_FALSE) {\
auto pc_tmp = pc;\
opcodetype next_opcode;\
valtype dummy_data;\
if (script.GetOp(pc_tmp, next_opcode, dummy_data) && next_opcode == OP_IF) {\
return set_error(serror, SCRIPT_ERR_DISCOURAGE_UPGRADABLE_NOPS);\
}\
}' \
src/script/interpreter.cpp > _
mv -f _ src/script/interpreter.cpp
Configurar, compilar i instal·lar
Per comoditat, pot ser útil tenir la pàgina de manual de bitcoin-cli
a la
mateixa màquina perquè es puguin consultar fora de línia, està instal·lada per
defecte en aquesta guia
Si NO ho voleu, executeu-ho
MAN=--disable-man
./autogen.sh
./configure \
--prefix=/usr \
"${MAN:---mandir=/usr/share/man}" \
--with-daemon \
--with-utils \
--without-bdb \
--without-gui \
--without-libs \
--without-qrencode \
--enable-hardening \
--enable-lto \
--enable-reduce-exports \
--enable-static \
--disable-bench \
--disable-ccache \
--disable-fuzz \
--disable-fuzz-binary \
--disable-gui-tests \
--disable-maintainer-mode \
--disable-shared \
--disable-tests \
--disable-wallet
make
$SU make install
[ -z $MAN ] && $SU apk add mandoc man-pages
$SU install -D -m 0660 -o bitcoin -g bitcoin ./share/examples/bitcoin.conf /etc/bitcoin/bitcoin.conf
”Strip” els binaris instal·lats
$SU strip -v /usr/bin/bitcoin*
Neteja
cd
rm -rf /tmp/bitcoin-${VERSION}* /tmp/SHA256SUMS /tmp/SHA256SUMS.asc
$SU apk del .build-deps
Genera credencials d’accés
Perquè altres programes consultin Bitcoin Core necessiten les credencials d’accés adequades. Per evitar emmagatzemar el nom d’usuari i la contrasenya en un fitxer de configuració en text sense format, la contrasenya és hasheja. Això permet que Bitcoin Core accepti una contrasenya, l’hash i la compare amb el hash emmagatzemat, mentre que no és possible recuperar la contrasenya original.
Una altra opció per obtenir les credencials d’accés és a través del fitxer
.cookie
al directori de dades de Bitcoin. Això es crea automàticament i pot
ser llegit per tots els usuaris que són membres del grup “bitcoin”.
Bitcoin Core proporciona un script python
senzill per generar la línia de
configuració per al fitxer de configuració.
Però preferim fer-ho a la nostra manera, molt més senzill
read -r username password; \
[ ! "$username" ] || [ ! "$password" ] && {
printf "%s\n" "Error, must provide username and password"
} || {
sed "s/^#*rpcauth=.*$/rpcauth=${username}:${salt=$(openssl rand -hex 16)}\$$(\
printf "%s" "${password}" | \
openssl dgst -sha256 -hmac "$salt" | \
awk '{print $2}' \
)/" /etc/bitcoin/bitcoin.conf > _; \
unset salt; \
$SU mv -f _ /etc/bitcoin/bitcoin.conf
}
Configuració
"dbcache=..."
s’ha d’ajustar a la capacitat del vostre maquinari
- Modifiqueu/descomenteu aquestes línies. Guardeu i sortiu.
$SU $EDITOR /etc/bitcoin/bitcoin.conf
[...]
assumevalid=0
[...]
blockfilterindex=1
[...]
blocksonly=1
[...]
coinstatsindex=1
[...]
dbcache=8192
[...]
txindex=1
[...]
i2psam=127.0.0.1:7656
[...]
peerblockfilters=1
[...]
peerbloomfilters=1
[...]
proxy=127.0.0.1:9050
[...]
zmqpubhashblock=tcp://127.0.0.1:8433
[...]
zmqpubrawblock=tcp://127.0.0.1:28332
[...]
zmqpubrawtx=tcp://127.0.0.1:28333
[...]
debug=i2p
debug=tor
[...]
datacarrier=0
[...]
permitbaremultisig=0
[...]
server=1
[...]
Comproveu aquesta configuració de mostra de Bitcoin Core al navegador web
Rebutjar xarxes no privades
[...]
onlynet=onion
[...]
onlynet=i2p
[...]
dns=0
[...]
dnsseed=0
[...]
I afegiu nodes de llavors, comproveu una llista de nodes de llavors aquí
##Tor seed nodes
seednode=2bqghnldu6mcug...tvci6klcwzepnjd46ikjyd.onion:8333
[...]
##I2P seed nodes
seednode=255fhcp6ajvftn...3bamyh2iu5r3gnr2rq.b32.i2p:0
[...]
Dispositius de baix rendiment
[...]
# Slow devices optimizations
## Limit the number of max peers connections
maxconnections=40
[...]
## Tries to keep outbound traffic under the given target per 24h
maxuploadtarget=5000
[...]
## Increase the number of threads to service RPC calls (default: 4)
rpcthreads=128
[...]
## Increase the depth of the work queue to service RPC calls (default: 16)
rpcworkqueue=256
[...]
#coinstatsindex=1
[...]
#assumevalid=0
[...]
Tingueu en compte que amb el paràmetre maxuploadtarget
activat, necessitareu
afegir a la llista blanca la connexió a Electrs i Bisq afegint aquests
paràmetres a bitcoin.conf
:
- Electrs:
whitelist=download@127.0.0.1
- Bisq:
whitelist=bloomfilter@192.168.0.0/16
Crea el servei init.d
El sistema ha d’executar el dimoni bitcoin automàticament en segon pla, fins i
tot quan ningú ha iniciat sessió. Utilitzem openrc
, un dimoni que controla el
procés d’inici mitjançant fitxers de configuració.
- Crea la configuració d’init.d
$SU $EDITOR /etc/init.d/bitcoind
- Introdueix la configuració següent completa. Guarda i surt
#!/sbin/openrc-run
: ${BITCOIND_CONFIGFILE:=/etc/bitcoin/bitcoin.conf}
: ${BITCOIND_DATADIR:=/var/lib/bitcoind}
: ${BITCOIND_LOGDIR:=/var/log/bitcoind}
: ${BITCOIND_USER:=bitcoin}
: ${BITCOIND_GROUP:=bitcoin}
: ${BITCOIND_BIN:=/usr/bin/bitcoind}
: ${BITCOIND_OPTS=${BITCOIND_OPTS}}
: ${BITCOIND_SIGTERM_TIMEOUT:=600}
BITCOIND_PIDDIR="/run/bitcoind"
name="Bitcoin Core daemon"
description="Bitcoin cryptocurrency P2P network daemon"
required_files="${BITCOIND_CONFIGFILE}"
pidfile="${BITCOIND_PIDDIR}/${SVCNAME}.pid"
retry="${BITCOIND_SIGTERM_TIMEOUT}"
command="${BITCOIND_BIN}"
command_args="-pid=${pidfile}
-conf=${BITCOIND_CONFIGFILE}
-datadir=${BITCOIND_DATADIR}
-debuglogfile=${BITCOIND_LOGDIR}/debug.log
${BITCOIND_OPTS}"
command_args_background="-daemonwait"
command_user="${BITCOIND_USER}:${BITCOIND_GROUP}"
depend() {
use net
need localmount
checkdepend onion tor
checkdepend i2psam i2pd
after logger firewall
}
checkdepend() {
if grep -qs "^${1}=" "${BITCOIND_CONFIGFILE}"; then
need "${2:-$1}"
fi
}
start_pre() {
checkpath --file --mode 0660 --owner "${command_user}" "${BITCOIND_CONFIGFILE}"
checkpath --directory --mode 0750 --owner "${command_user}" "${BITCOIND_DATADIR}"
checkpath --directory --mode 0755 --owner "${command_user}" "${BITCOIND_LOGDIR}"
checkpath --directory --mode 0755 --owner "${command_user}" "${BITCOIND_PIDDIR}"
checkconfig
}
start_post() {
chmod -R u=rwX,g=rX,o= "${BITCOIND_DATADIR}" "${BITCOIND_LOGDIR}"
}
checkconfig() {
if ! grep -qs '^rpcauth=' "${BITCOIND_CONFIGFILE}"
then
eerror ""
eerror "ERROR: You must set a secure rpcauth to run bitcoind."
eerror "The setting must appear in ${BITCOIND_CONFIGFILE}"
eerror ""
eerror "This auth is security critical to securing wallets "
eerror "and must not be the same as the rpcuser setting."
eerror ""
eerror "It is recommended that you also set alertnotify so you are "
eerror "notified of problems:"
eerror ""
eerror "ie: alertnotify=echo %%s | mail -s \"Bitcoin Alert\"" \
"admin@foo.com"
eerror ""
return 1
fi
}
- Habilita el permís d’execució
$SU chmod +x /etc/init.d/bitcoind
- Habilita l’arrencada automàtica
$SU rc-update add bitcoind default
Crea la configuració de logrotate
Logrotate és una utilitat del sistema que gestiona la compressió i la rotació dels fitxers de registre en sistemes Linux. Si els registres no roten, es comprimeixen i es purguen periòdicament, eventualment poden consumir tot l’espai de disc disponible al sistema. Permet la rotació, la compressió, l’eliminació i l’enviament automàtic dels fitxers de registre. Cada fitxer de registre es pot gestionar diàriament, setmanalment, mensualment o quan creixi massa.
Normalment, logrotate s’executa com un treball cron diari.
- Creeu el fitxer de configuració de bitcoin logrotate
$SU $EDITOR /etc/logrotate.d/bitcoind
- Introdueix la configuració següent completa. Guarda i surt
/var/log/bitcoind/*.log {
weekly
missingok
rotate 104
compress
delaycompress
notifempty
create 0640 bitcoin bitcoin
sharedscripts
postrotate
killall -HUP `cat /run/bitcoind/bitcoind.pid`
endscript
}
- Prova
$SU logrotate /etc/logrotate.d/bitcoind --debug
Executa
- Inicia el servei
$SU rc-service bitcoind start
- Comprova els registres
tail -f /var/log/bitcoind/debug.log
2024-01-17T13:48:34Z Bitcoin Core version v26.0.0 (release build)
2024-01-17T13:48:34Z InitParameterInteraction: parameter interaction: -blocksonly=1 -> setting -whitelistrelay=0
2024-01-17T13:48:34Z InitParameterInteraction: parameter interaction: -blocksonly=1 -> setting -maxmempool=5
2024-01-17T13:48:34Z Using the 'sse4(1way),sse41(4way),avx2(8way)' SHA256 implementation
2024-01-17T13:48:34Z Using RdSeed as an additional entropy source
2024-01-17T13:48:34Z Using RdRand as an additional entropy source
2024-01-17T13:48:34Z Default data directory /dev/null/.bitcoin
2024-01-17T13:48:34Z Using data directory /var/lib/bitcoind
2024-01-17T13:48:34Z Config file: /etc/bitcoin/bitcoin.conf
2024-01-17T13:48:34Z Config file arg: assumevalid="0"
2024-01-17T13:48:34Z Config file arg: blockfilterindex="1"
2024-01-17T13:48:34Z Config file arg: blocksonly="1"
2024-01-17T13:48:34Z Config file arg: coinstatsindex="1"
2024-01-17T13:48:34Z Config file arg: daemon="1"
2024-01-17T13:48:34Z Config file arg: dbcache="24576"
2024-01-17T13:48:34Z Config file arg: debug="i2p"
2024-01-17T13:48:34Z Config file arg: debug="tor"
2024-01-17T13:48:34Z Config file arg: debuglogfile="/var/log/bitcoind/debug.log"
2024-01-17T13:48:34Z Config file arg: i2psam="127.0.0.1:7656"
2024-01-17T13:48:34Z Config file arg: onion="127.0.0.1:9050"
2024-01-17T13:48:34Z Config file arg: peerblockfilters="1"
2024-01-17T13:48:34Z Config file arg: peerbloomfilters="1"
2024-01-17T13:48:34Z Config file arg: rpcauth=****
2024-01-17T13:48:34Z Config file arg: server="1"
2024-01-17T13:48:34Z Config file arg: startupnotify="chmod -R u=rwX,g=rX,o= /var/lib/bitcoind /var/log/bitcoind"
2024-01-17T13:48:34Z Config file arg: txindex="1"
2024-01-17T13:48:34Z Config file arg: v2transport="1"
2024-01-17T13:48:34Z Command-line arg: conf="/etc/bitcoin/bitcoin.conf"
2024-01-17T13:48:34Z Command-line arg: datadir="/var/lib/bitcoind"
2024-01-17T13:48:34Z Command-line arg: pid="/run/bitcoind/bitcoin.pid"
2024-01-17T13:48:34Z Command-line arg: server=""
[...]
2024-01-17T13:48:46Z Pre-synchronizing blockheaders, height: 2000 (~0.25%)
[...]
Superviseu el fitxer de registre durant uns minuts per veure si funciona bé (pot
aturar-se a la dnsseed thread exit
, això està bé)
- Espereu uns minuts fins que s’iniciï Bitcoin Core i introduïu la següent ordre per obtenir les vostres adreces Tor i I2P. Preneu-ne nota, més endavant potser ho necessiteu
bitcoin-cli getnetworkinfo | grep 'address.*\.onion\|address.*\.i2p'
"address": "vctk9tie5srguvz262xpyukkd7g4z2xxxy5xx5ccyg4f12fzop8hoiad.onion",
"address": "sesehks6xyh31nyjldpyeckk3ttpanivqhrzhsoracwqjxtk3apgq.b32.i2p",
- Comproveu l’habilitació correcta de les xarxes I2P i Tor
bitcoin-cli -netinfo
Bitcoin Core client v26.0.0 - server 70016/Satoshi:26.0.0/
ipv4 ipv6 onion i2p total block
in 0 0 25 2 27
out 7 0 2 1 10 2
total 7 0 27 3 37
Local addresses
xdtk6tie4srguvz566xpyukkd7m3z3vbby5xx5ccyg5f64fzop7hoiab.onion port 8333 score 4
etehks3xyh55nyjldjdeckk3nwpanivqhrzhsoracwqjxtk8apgk.b32.i2p port 0 score 4
- Assegureu-vos que bitcoind escolti als ports RPC i P2P predeterminats
$SU netstat -lntup | grep LISTEN | grep bitcoind
tcp 0 0 0.0.0.0:8333 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:8334 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:8332 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:8433 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:28332 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 127.0.0.1:28333 0.0.0.0:* LISTEN 28295/bitcoind
tcp 0 0 :::8333 :::* LISTEN 28295/bitcoind
tcp 0 0 ::1:8332 :::* LISTEN 28295/bitcoind
Tingueu en compte:
-
Quan
bitcoind
encara s’està iniciant, és possible que rebeu un missatge d’error com “verifying blocks”. Això és normal, només doneu-li uns minuts. -
Entre altres dades, es mostra el “verificationprogress”. Un cop aquest valor arriba a gairebé 1 (0,99999…), la cadena de blocs està actualitzada i totalment validada.
Bitcoin Core s’està sincronitzant
Això pot trigar entre un dia i una setmana, depenent principalment del rendiment del vostre ordinador. El millor és esperar fins que s’hagi completat la sincronització abans de continuar.
Explora bitcoin-cli
Si tot funciona bé, aquest és el moment perfecte per familiaritzar-se amb
Bitcoin, els aspectes tècnics de Bitcoin Core, i jugar amb bitcoin-cli
fins
que la cadena de blocs estigui al dia.
-
The Little Bitcoin Book és una fantàstica introducció a Bitcoin, centrada en el “per què” i menys en el “com”.
-
Mastering Bitcoin d’Andreas Antonopoulos és un bon punt de partida, especialment el capítol 3 (ignoreu la primera part com compilar des del codi font):
- Definitivament heu de tenir una còpia real d’aquest llibre!
- llegiu-lo en línia a GitHub
- Learning Bitcoin from the Command Line de Christopher Allen ofereix una immersió profunda en la comprensió dels aspectes tècnics de Bitcoin.
- A més, fes una ullada a la referència de bitcoin-cli
Activeu mempool i reduïu ‘dbcache’ després d’una sincronització completa
Un cop Bitcoin Core estigui completament sincronitzat, podem reduir la mida de la memòria cau de la base de dades. Una memòria cau més gran accelera la descàrrega inicial del bloc, ara volem reduir el consum de memòria per permetre que el client Lightning i el servidor Electrum funcionin en paral·lel. Ara també volem habilitar el node per escoltar i transmetre transaccions.
- Comenta les línies següents al fitxer
bitcoin.conf
Bitcoin Core només utilitzarà la mida de memòria cau predeterminada de 450 MiB
en lloc de la configuració de la memòria RAM. Si blocksonly=1
es deixa sense
comentar, evitarà que Electrum Server rebi dades de tarifes RPC i no funcionarà.
$SU $EDITOR /etc/bitcoin/bitcoin.conf
#dbcache=2048
#blocksonly=1
#assumevalid=0
- Reinicieu Bitcoin Core perquè la configuració tingui efecte
$SU rc-service bitcoind restart
Client d’OpenTimestamps
Quan vam instal·lar Bitcoin Core, vam verificar la marca de temps del fitxer de suma de verificació mitjançant el lloc web OpenTimestamp. En el futur, probablement haureu de verificar més segells de temps, quan instal·leu programes addicionals (per exemple, LND) i quan actualitzeu els programes existents a una versió més nova. En lloc de confiar en un tercer, seria preferible (i més divertit) verificar les marques de temps utilitzant les vostres pròpies dades de blockchain. Ara que Bitcoin Core s’està executant i sincronitzat, podem instal·lar el client OpenTimestamp per verificar localment la marca de temps del fitxer de suma de verificació binaris.
A Alpine Linux no es recomana instal·lar paquets a nivell de sistema sense el
gestor de paquets del sistema (apk). OpenTimestamp encara no està empaquetat,
així que instal·lem en un entorn virtual aïllat utilitzant pipx
.
- Instal·lar dependències
$SU apk add pipx
- Afegeix variables d’entorn
printf "%s\n" \
"export PIPX_HOME=/var/lib/pipx" \
"export PIPX_BIN_DIR=/usr/bin" \
"export PIPX_MAN_DIR=/usr/share/man" \
| $SU tee -a /etc/profile.d/pipx.sh
- Aplica els canvis
source /etc/profile.d/pipx.sh
- Instal·leu el client OpenTimestamp
$SU pipx install opentimestamps-client
- Mostra la versió del client d’OpenTimestamps per comprovar que està instal·lada correctament
ots --version
v0.7.1
Per actualitzar el client OpenTimestamps, simplement executeu
$SU pipx upgrade opentimestamps-client
Actualització
La darrera versió es pot trobar a la pàgina de
Github del projecte Bitcoin
Core. Llegiu sempre les RELEASE
NOTES primer!
Quan s’actualitza, pot haver-hi canvis o canvis en l’estructura de dades que
necessiten una atenció especial. Substituïu el valor de la variable d’entorn
VERSION=x.xx
per a la darrera versió si encara no s’ha modificat en aquesta
guia.