Minar en solitario en la nueva Testnet4

"chain": "testnet4"
Aprovechando el inminente lanzamiento de la Testnet4 que solucionará los problemas que arrastra la Testnet3, vamos a instalar un nodo de esta nueva red según el Pull Request 29775 : https://github.com/bitcoin/bitcoin/pull/29775
Y después, jugaremos nuestras cartas para minar con CPU&GPU a ver si tenemos suerte y nos llevamos algunos Bitcoin de test.
Una experiencia que te hace sentir los primeros días de Bitcoin Mainnet cuando todavía se minaba con CPU.
Vamos a ello

Dependencias

En una ventana de Terminal:

Actualizamos equipo

sudo apt update
sudo apt upgrade

Instalamos Git

Vamos a necesitar Git. Lo instalamos:
sudo apt install git
Verificamos escribiendo git --version:
> git version 2.34.1

Instalamos dependencias Bitcoin Core

Recomendaciones para Linux de Jon Atack
sudo apt-get install automake autotools-dev bsdmainutils build-essential ccache clang gcc git libboost-dev libboost-filesystem-dev libboost-system-dev libboost-test-dev libevent-dev libminiupnpc-dev libnatpmp-dev libqt5gui5 libqt5core5a libqt5dbus5 libsqlite3-dev libtool libzmq3-dev pkg-config python3 qttools5-dev qttools5-dev-tools qtwayland5 systemtap-sdt-dev

Descarga de Bitcoin Core Pull 29775

En nuestra ventana de terminal descargaremos el código de Bitcoin Core clonando su repositorio de git:
cd
git clone https://github.com/bitcoin/bitcoin.git
Y nos ubicamos en esta carpeta:
cd bitcoin/src
Ahora seleccionaremos la rama del Pull Request donde se está trabajando Testnet4:
git fetch origin pull/29775/head:2024-04-testnet-4-fix
git checkout 2024-04-testnet-4-fix
Y con esto ya podemos compilar. Volvemos a la carpeta de bitcoin:
cd ..
Y compilamos en 3 comandos:
./autogen.sh
./configure
make -j "$(($(nproc) + 1))"
con este último comando utilizamos todos los cores de tu ordenador. Si quieres solo usar uno (más tiempo) simplemente ejecuta make
Este último proceso tarda un poco (5-10 minutos en función de vuestro procesador). Paciencia.
Al terminar moveremos bitcoind y bitcoin-cli a una carpeta de testing:
cd
mkdir -p testnet4/bin
cp ~/bitcoin/src/bitcoind ~/testnet4/bin/
cp ~/bitcoin/src/bitcoin-cli ~/testnet4/bin/

Ejecutando Testnet 4

Preparación del bitcoin.conf

Antes de configurar nuestro archivo bitcoin.conf, haremos un test run para ver que todo esté correcto:
cd testnet4/bin
./bitcoind -testnet4
Cuando veamos algo así:
Cancelaremos el proceso con las teclas Ctrl+C
Ahora ya se habrá creado nuestra carpeta .bitcoin y ahí es donde vamos a configurar nuestro bitcoin.conf:
cd ~/.bitcoin
En esta carpeta creamos el archivo bitcoin.conf donde a parte de configurar que bitcoind siempre se ejecute en testnet4, también le pediremos que cree un índice de todas las transacciones y que levante un servidor. Esto nos servirá para poder minar monedas de test pero antes crearemos unas creedenciales para nuestro RPC con rpcauth.py. Para ello descargaremos rpcauth.py:
wget https://raw.githubusercontent.com/bitcoin/bitcoin/master/share/rpcauth/rpcauth.py
Acto seguido tenemos que pensar que usuario y contraseña querremos poner a nuestro RPC. Si por ejemplo el usuario es luna y la contraseña nakamoto2140 ejecutaremos el siguiente comando:
python3 rpcauth.py luna nakamoto2140
Esto nos dará como resultado una cadena de texto tal que así:
rpcauth=luna:c4d0fabe64810eddfff559837a52ae5d$98b24451619e396c0069daa7cdb6d3d2f39e7d3d6a90b9a04135ba1a428800e3
La copiamos porque la vamos a necesitar para nuestro bitcoin.conf. Ahora sí, creamos este archivo con:
nano bitcoin.conf
Y en el archivo pegamos lo siguiente
testnet4=1
txindex=1
server=1
[testnet4]
rpcport=5000
rpcallowip=127.0.0.1
rpcbind=0.0.0.0
rpcauth=EL CODIGO QUE TE HAYA SALIDO A TI
Le damos a las teclas Ctrl+X y acto seguido tecleamos Y para guardar y salir.
Con esto volvemos a nuestra carpeta de testing:
cd ~/testnet4/bin
Y ejecutamos bitcoind, esta vez (Y SOLO ESTA VEZ) con el flag -reindex
./bitcoind -reindex
Así volveremos a ver la pantalla de sincronización de bloques que veiamos antes pero habrá vuelto a empezar para indexar todas las transacciones desde el principio. Por eso, una vez hecho, no volveremos a reindexar otra vez. Esperamos un poco y en menos de 1-2 minutos ya se sincroniza (a fecha de escritura la altura de bloque es de tan solo 25.164 bloques con lo que no hace falta más, pero con el tiempo esto irá aumentando).
Y así se nos quedará la ventana como "congelada" en algún punto, pero simplemente es que habrá llegado al extremo más avanzado de la cadena y quedará esperando a que se minen y reciban nuevos bloques:
Felicidades ya has sincronizado un nuevo nodo de testnet4. Ahora vamos a hacerle algunas consultas y a crear nuestra primera wallet.
CONSEJO 💡
Para poder cerrar esta ventana de terminal y que bitcoind no se detenga, dale a Ctrl+C en cualquier momento y ejecuta:
./bitcoind -daemon
Para ver lo que está pasando como lo hacías antes, puedes ejecutar en cualquier carpeta de terminal el siguiente comando:
tail -f ~/.bitcoin/testnet4/debug.log
Para salir, vuelve a hacer Ctrl+C . Ahora, no verás lo que sucede, pero bitcoind se seguirá ejecutando en el fondo.
Cuando quieras detener el proceso de bitcoin, desde cualquier carpeta ejecuta:
~/testnet4/bin/bitcoin-cli -testnet4 stop

Dialogando con nuestra testnet4

Estando en nuestra carpeta testnet4/bin:
cd ~/testnet4/bin
Dialogaremos con nuestra testnet4 con el comando bitcoin-cli -testnet4. Con lo que si por ejemplo queremos ver el estado de nuestra cadena de bloques de testnet4 se lo pediremos con getblockchaininfo así:
./bitcoin-cli -testnet4 getblockchaininfo

Solo mining con bfgminer

Dependencias

Instalamos dependencias:
sudo apt-get install build-essential autoconf automake libtool pkg-config libcurl4-gnutls-dev libjansson-dev uthash-dev libncursesw5-dev libudev-dev libusb-1.0-0-dev libevent-dev libmicrohttpd-dev libhidapi-dev libsensors-dev

Instalación bfgminer

Nos ubicamos en el home de nuestro usuario
cd
Clonamos el repositorio de Luke:
git clone https://github.com/luke-jr/bfgminer
Nos unimos a la carpeta y actualizamos el git
cd bfgminer
sed -i 's/git:/https:/g' .gitmodules
Ahora compilamos como ya hicimos con Bitcoin Core
./autogen.sh
./configure --enable-opencl --enable-cpumining
make
Y con esto tendremos el ejecutable "bfgminer" en la misma carpeta y podremos empezar a minar

Ejecutar bfgminer

Ejecutaremos bfgminer con el siguiente comando:
~/bfgminer/bfgminer -S opencl:auto -S cpu:auto -o http://127.0.0.1:5000 -u luna -p nakamoto2140 --generate-to mmFuEcas1fYqsE7DSGcA82cvTvVXU1Zo1Y --coinbase-sig "Viva el directo2140"
Si has utilizado la misma ruta para compilar bfgminer y estás ejecutando bitcoin core en la misma máquina, no tendrás que cambiar nada hasta el -u
El parametro -u es de usuario y has de colocar el que pusiste en la configuración del rpcauth.py. Igual con -p que es de password y tendrás que colocar la que utilizaste.
El --generate-to es para la dirección donde quieras recibir las recompensar de minar un bloque. Nota, cuando he intentado pasarle una dirección native segwit, bfgminer no me la ha aceptado. Por eso he creado una billetera Legacy P2PKH de Testnet4 en Sparrow. Esta dirección la ha tomado sin problema.
El --coinbase-sig es el mensaje (entre comillas) que quieres que aparezca en la transacción coinbase para identificarte como minero.
Y asi, al ejecutar este comando verás como tu ordenador empieza a minar con CPU o GPU (lo que encuentre) y verás como en la ventana donde ves todo lo que está pasando con tu bitcoind, tu nodo empieza a enviarle plantillas de bloques a tu miner (tu ordenador en este caso)...
... que en su ventana te mostrará el Hashrate que es capaz de alcanzar
Felicidades. Tienes un nodo de Testnet4 y estás intentando minar bloques en solitario.