Saltar al contenido principal

Ubuntu

Bitcoin Core

Dependencias

Vamos a instalar Python 3.12.3.

aviso

Las versiones superiores no me funcionaron. Me causaron errores mas adelante con Lightning Network.

Suponiendo que tengas instalado python, build-essential y git debes instalar las siguientes dependencias:

dependencies
sudo apt-get update
sudo apt-get install -y \
jq autoconf automake libtool libsqlite3-dev libffi-dev \
net-tools zlib1g-dev libsodium-dev gettext

¿Por qué Bitcoin Knots?

Bitcoin Knots es un fork de Bitcoin Core mantenido por Luke Dashjr. Es totalmente compatible — mismos bitcoind, bitcoin-cli y bitcoin.conf — así que el resto de esta guía aplica para ambos clientes.

Por qué recomendamos Bitcoin Knots sobre Bitcoin Core
  • Mayor control y personalización — expone opciones de configuración adicionales que no están disponibles en Core.
  • Filtros de Spam (Límite de Datos) — permite configurar datacarriersize para filtrar transacciones no financieras que saturan la blockchain.
  • Mayor Descentralización — políticas predeterminadas más estrictas alineadas con el diseño original de Bitcoin.
  • Políticas de Transmisión — control más fino sobre qué transacciones tu nodo retransmite y acepta en el mempool.

Instalación de Bitcoin Knots

Bitcoin Knots no está disponible como snap, así que lo instalamos desde el binario oficial en bitcoinknots.org:

Instalación de Bitcoin Knots
# Consulta bitcoinknots.org para la versión más reciente y sustituye el nombre del archivo
wget https://bitcoinknots.org/files/27.x/27.1.knots20241119/bitcoin-27.1.knots20241119-x86_64-linux-gnu.tar.gz

tar -xzf bitcoin-27.1.knots20241119-x86_64-linux-gnu.tar.gz

sudo install -m 0755 -o root -g root -t /usr/local/bin \
bitcoin-27.1.knots20241119/bin/bitcoind \
bitcoin-27.1.knots20241119/bin/bitcoin-cli

Alternativa: Bitcoin Core

Si prefieres el cliente upstream más conservador, instálalo via snap:

info

También existe la opción de compilar Bitcoin Core desde el código fuente.

Instalación de Bitcoin Core
sudo snap install bitcoin-core
# Creamos un link simbólico de bitcoind y bitcoin-cli desde el snap.
sudo ln -s /snap/bitcoin-core/current/bin/bitcoin{d,-cli} /usr/local/bin/

Este nodo de bitcoin como lo vamos a usar para desarrollar aplicaciones no nos vamos a traer toda la blockchain (casi 1TB) vamos a configurar un pruned node o nodo podado.

Vamos a crear el archivo de configuracion de nuestro nodo:

nano ~/.bitcoin/bitcoin.conf

Dentro vamos a agregar la siguiente configuracion:

bitcoin.conf
regtest=1

[main]
prune=550

[regtest]
rcpport=18443
rpcuser=foo
rpcpassword=bar

Ejecución de Bitcoin para Desarrollo

Vamos a abrir dos ventanas o pestañas de terminal:

  • En la primera terminal ejecutamos bitcoind el cual va a correr el nodo de bitcoin y va sincronizar el blockchain como es un pruned node solo traera una parte minima de la blockchain.
bitcoind
  • En la segunda terminal ejecutamos bitcoin-cli donde nos va a mostrar la info del nodo.
bitcoin-cli getblockchaininfo

Si todo sale bien deberiamos ver algo como esto:

getblockchaininfo salida
{
"chain": "main",
"blocks": 1,
"headers": 1,
"bestblockhash": "0000000000000000000000000000000000000000000000000000000000000000",
"difficulty": 1,
"mediantime": 0,
"verificationprogress": 1,
"initialblockdownload": true,
"chainwork": "0000000000000000000000000000000000000000000000000000000000000000",
"size_on_disk": 0,
"pruned": true,
"pruneheight": 0,
"automatic_pruning": true,
"prune_target_size": 0,
"softforks": [],
"warnings": ""
}
info

Toda petición realizada con bitcoin-cli nos responderá en formato JSON.

Vamos a la terminal donde se esta corriendo bitcoind y cancelamos su ejecución con ctrl + c.

aviso

Dejar corriendo bitcoind podria tardar muchas horas o incluso días en sincronizar el todo el blockchain.

nota

Si en tu caso la aplicación que quieres desarrollar es solamente para Bitcoin, sin tocar la Lightning Network, puedes saltarte el resto de la guía. Y tus siguientes pasos seran terminar de sincronizar la blockchain con bitcoind y luego seguir usando bitcoin-cli.

Instalación de Lightning

Vamos a descargar el repositorio:

git clone https://github.com/ElementsProject/lightning.git
cd lightning

Compilamos e instalamos lightning:

./configure --disable-rust
make -j15
sudo make install
info

En make -j15 estamos indicando que queremos usar 15 cores para compilar el software. Si no sabemos el numero de cores de nuestra pc podemos sustituirlo por make -j$(($(nproc)-1)) para usar los cores de nuestra pc dejando uno libre.

Corremos la testnet de lighning (en realidad regtest, pero eso lo explicaré en otra guía):

. contrib/startup_regtest.sh

El comando anterior es un script que va a correr bitcoind, bitcion-cli, lightningd y lightning-cli. Y nos va a dar la siguiente salida con unos comandos básicos.

. contrib/startup_regtest.sh salida
Useful commands:
start_ln 3: start three nodes, l1, l2, l3
connect 1 2: connect l1 and l2
fund_nodes: connect all nodes with channels, in a row
stop_ln: shutdown
destroy_ln: remove ln directories

El comando start_ln creará un par de nodos en la red lightning (l1 y l2).

start_ln

Tambien nos dará una lista de comandos para interactuar con cada nodo:

start_ln salida
Bitcoin Core starting
awaiting bitcoind...
Loading "default" bitcoind wallet.
[1] 10459
[2] 10463
Commands:
l1-cli, l1-log,
l2-cli, l2-log,
bt-cli, stop_ln, fund_nodes
timed out parsing log /tmp/l1/log

Vamos a obtener la información de uno de los nodos (l1).

l1-cli getinfo
info

Toda petición realizada en lightning nos responderá en formato JSON.

getinfo salida
{
"id": "02d44e9a844e84ab76d412601c8e648ce039b8266874ddfe5b854fb6723096ea06",
"alias": "SLICKERROUTE-v24.11-91-g9e29bde",
"color": "02d44e",
"num_peers": 0,
"num_pending_channels": 0,
"num_active_channels": 0,
"num_inactive_channels": 0,
"address": [],
"binding": [
{
"type": "ipv4",
"address": "127.0.0.1",
"port": 7171
}
],
"version": "v24.11-91-g9e29bde",
"blockheight": 109,
"network": "regtest",
"fees_collected_msat": 0,
"lightning-dir": "/tmp/l1/regtest",
"our_features": {
"init": "8008a0882a8a59a1",
"node": "8088a0882a8a59a1",
"channel": "",
"invoice": "02000002024100"
}
}

Ahora vamos a agregarle fondos (unos cuantos satoshis) a los nodos:

fund_nodes

Genial!!

Obtenemos la información de los fondos del nodo l1:

l1-cli listfunds

La propiedad our_amount_msat es el monto en satoshis.

listfunds salida
{
"outputs": [
{
"txid": "3383b42043c96d072f1a22f11ea1e4039bb93176f13d397178a6eb13cb7113e2",
"output": 1,
"amount_msat": 98999834000,
"scriptpubkey": "51200e98fba542bc6fda8cb83ae930cebd6f6957f3cb5d2eb49e47a6d0f612473efa",
"address": "bcrt1pp6v0hf2zh3ha4r9c8t5npn4ada540u7tt5htf8j85mg0vyj88maq9zy237",
"status": "confirmed",
"blockheight": 111,
"reserved": false
}
],
"channels": [
{
"peer_id": "02fed4dea6a6bc7dcc8d7bb4c88aa452fc4cd3878949851b4c0c23e71eebfc751f",
"connected": true,
"state": "CHANNELD_NORMAL",
"channel_id": "8274abbaeb547055d57f07337965eadea778c7e0344dd6d1b55257746cd85288",
"short_channel_id": "111x1x0",
"our_amount_msat": 1000000000,
"amount_msat": 1100000000,
"funding_txid": "3383b42043c96d072f1a22f11ea1e4039bb93176f13d397178a6eb13cb7113e2",
"funding_output": 0
}
]
}
nota

¡Felicidades!! Ahora podemos construir aplicaciones sobre Bitcoin y Lightning Network. ...bueno, mas o menos. Por lo menos podemos comenzar a experimentar con ello.