Configuración del nodo

Comandos del protocolo P2P de Bitcoin

Si tienes instalado un nodo completo de Bitcoin, sabrás que el protocolo te proporciona una interfaz de comandos que se realizan a través de un procedimiento remoto de ejecución o RPC por sus siglas en inglés (Remote Procedure Call), los cuales son útiles para realizar validaciones, operaciones y cualquier tipo de ejecución de índole administrativa en tu nodo.

Estos comandos pueden ejecutarse desde la consola de Bitcoin (el caso de Bitcoin-Core) o desde un terminal de comandos de linux, windows o unix. Para asegurar que los comandos están activos es necesario activar en el archivo de configuración de bitcoin.conf con la opción server=1 (dependiendo de como accedas a Bitcoin esta opción está habilitada por defecto o no, pero con este parámetro te aseguras de que esta habilitada).

Para evitar problemas de configuración o compatibilidad de clientes RPC, Bitcoin provee su propio cliente para la ejecución de comandos a través del cliente bitcoin-cli desde el cual puedes usar como interprete de línea de comandos.

Hablar de todos los comandos implicaría prácticamente replica la API de Bitcoin, y no es mi objetivo ni veo que pueda aportar nada, si quieres indagar más, te remiendo entrar en este link.

Sin embargo si que trataré de ir incorporando algunos comandos que para mi fueron de utilidad en el aprendizaje básico de Bitcoin, desde la visión de que los estarías ejecutando desde tú propio nodo y con la intención de validar el estado o las operaciones en tu nodo, serían:

Voy a darte un ejemplo, si ya conoces el mundo de Bitcoin o te das un paseo por este sitio web, encontraras un software, que dicho sea de paso, me gusta mucho y lo encuentro super útil, llamado btc-rpc-explorer, este software te permite de manera gráfica conocer mucha información de tu nodo, pero no sabes de dónde viene, sin embargo si por ejemplo fueras programador o tuvieras inquietud por hacerte tu propio cuadro de mando  para conocer la información de lo que sucede en la red y que muy útil para entender si hay un alto volumen de transacciones por confirmar, cuál es la dificultad con la que se esta minando, etc., con unos cuantos comandos podrías saberlo, y aquí el ejemplo.

En la imagen que veras a continuación, sacada del btc-rpc-explorer y ejecutando tres sencillos comandos podrías conocer la información que se muestra en la imagen, esos comandos son:

  • getblockchaininfo: de la ejecución de este comando podrías tomar el dato chainwork y el tamaño de la blockchain en disco. En la imagen chainwork es la cantidad total de trabajo que se estima se ha realizado en la cadena activa, esta en hexadecimal y el campo size_on_disk se explica por si mismo.
  • getminininfo: de la ejecución de este comando tomarías el campo difficulty, el networkhashps y el campo pooledtx. En la imagen esos campos corresponderían a la dificultad de minado, al hashrate y las transacciones sin confirmar
  • getchaintxstats: de la ejecución de este comando tomarías el campo txcount y sabrías el total de transacciones en la cadena hasta el momento.

Ejemplo del uso de comandos

Otro excelente ejemplo de lo útil que son los comandos y de toda la información que te dan es el comando gettxoutsetinfo

Te permite calcular algunas estadísticas sobre la base de datos de UTXO que cada nodo de Bitcoin mantiene.

  • height: la altura del bloque que contiene el UTXO set más preciso. Este resultado podría ser más bajo que el resultado que devuelva el comando getinfo, ya que el nodo no elimina el UTXO set de la caché después de cada bloque.
  • bestblock: el hash del bloque del campo anterior, el cual es considerado como que contiene el cual el UTXO set más preciso.
  • transactions: el número total de las distintas transacciones a las que pertenecen los UTXO contenidas en la base de datos del nodo.
  • txouts: el número total de UTXO en la base de datos del nodo.
  • Bogosize: Una métrica sin sentido para el tamaño del conjunto UTXO
  • hash_serialized_2: el hash de toda la base de datos serializada. Se podría usar este valor para compararlo con el mismo valor en otros nodos (validando que tienen el mismo height block), con la finalidad de verificar la integridad del UTXO set.
  • disk_size: Tamaño estimado de la base de datos en disco.
  • total_amount: Indica el valor (en BTC) de todos los UTXO juntos, esta sería la mejor estimación posible que podrías obtener de la cantidad de BTC en circulación. Es una estimación ya que por ejemplo no considera los 50 BTC del bloque génesis ni algunos BTC perdidos debido a un bug de hace mucho tiempo en el protocolo y que dio origen al BIP30.

Por toda esta información al ejecutar este comando tarda un poquito más que otros comandos.

Otros comandos de ayuda podría ser el que se implementó desde la versión 0.17.0 de Bitcoin Core, fue una nueva API para realizar etiquetado de direcciones ya que anteriormente solo se podía realizar el etiquetado desde la interfaz gráfica del cliente Bitcoin-Qt, esta nueva API incluye algunos comandos que aunque simples pueden ser de utilidad para el etiquetado de las direcciones y para aprovechar ese etiquetado. Por ejemplo, el comando setlabel, recibe de entrada una dirección y un texto o etiqueta, ambos parámetros son obligatorios; con esto le asignas una etiqueta a la dirección que hayas usado, esto es útil para mantener organizada tu información y saber en ¿qué o para qué? haz usado esta dirección y por ejemplo si luego usas el comando getreceivedbylabel, el cual recibe de entrada una etiqueta y otro parámetro de manera opcional que es el número de confirmaciones tendrás el total de bitcoin agrupado bajo esa etiqueta.

 

Aquí te dejo otros comandos esperando que te puedan ser de ayuda.

getdifficulty

Te permite conocer la dificultad con la que los mineros están trabajando para ejecutar el proceso de validación de trabajo (PoW)

getbestblockhash

Con este comando puedes obtener el valor hash del bloque más reciente dentro de la cadena principal de blockchain

getblock

Con este comando  puedes, pasándole el hash de un bloque en particular, conocer la información del bloque y de todas las trx que contiene

getblockcount

Te permite obtener el numero del bloque actual en la blockchain

getblockhash

Te permite obtener el número de un bloque en particular, puedes obtener el hash de ese bloque; por ejemplo con un cero, obtendrás el hash del bloque génesis

getchaintips

Para saber si tu nodo esta conectado a la cadena principal, este comando  te dirá si tienes al menos un bloque invalido, si es un fork valido (que tiene todos los bloques validos pero aún no se conecta a la red principal), entre otras cosas.

getnetworkinfo

Te permite, dada la configuración que hayas puesto en el archivo bitcoin.conf,  ver la conexión de tu nodo, la versión de tu agente (cliente bitcoin) y tu dirección de conexión.

getpeerinfo

Te permite obtener la información de todos los nodos conectados al tuyo 

setnetworkactive

Te sirve para activar o des-activar toda la conectividad P2P de tu nodo. Por ejemplo, setnetworkactive false desactiva toda la conexión P2P de tu nodo.

getmininginfo

Te permite obtener información sobre el último bloque minado valido

getmempoolinfo

Te permite obtener la información sobre el pool de memoria, su tamaño y el estado de las transacciones. (El pool de memoria es muy importante para determinar el nivel de saturación de la red, si el tamaño del pool es alto significa que hay muchas trx esperando ser confirmadas y añadidas a los bloques, lo cual seguramente signifique que las comisiones por trx se elevaran)

gettransaction

Te permite obtener la información sobre una operación o transacción de tu wallet (con este comando no puedes ver trx que no sea de tu propia wallet).

getrawtransaction

Te permite obtener información sobre una operación o transacción, para poder obtener resultados deberás haber habilitado el indexado de la blockchain (txindex=1) y el bloque en el que se encuentra la trx deberá estar en tu nodo (sincronizado). Si añades un 1 al final de la sentencia del comando te muestra la información en formato texto en lugar de hexadecimal.

Debes tomar en consideración que solo podrás ver los datos de la trx sin procesar y no puedes conocer las comisiones de la trx o el monto de la operación.

createwallet

Tal vez sea de los comandos que más interesan y que más debemos estudiar y entender, ya que por si solo crear la billetera o wallet no es suficiente, pero nos sirve par ir entendiendo como funciona el protocolo. Con este comando puedes crear y cargar tu billetera, como varios de los comandos puedes pasarle algunos argumentos, por ejemplo para darle nombre o des-habilitar las claves y crear una billetera watchonly.

getnewaddress

Con este comando y un par de parámetros opcionales “label” y “address_type”, puedes crear tantas direcciones como quieras para recibir tus pagos, crear tus etiquetas y darles un tipo de dirección (legacy, multifirma o segwit), entre otras cosas

validateaddress

Si quieres validar una dirección, con este comando y como parámetro la dirección que quieres revisar, te dirá si la dirección es valida, si es witness y algunas otras cosas

sendtoaddress

Desde la consola de tu nodo btc podrías realizar el envió, por ejemplo de 10 satoshis, a una dirección a través del comando sendtoaddress <ADDRESS> 10.00, este comando tiene variedad de parámetros que podrías usar como por ejemplo: subtractfeefromamount=true y la comisión es descontada de los 10 satoshis y no de tu saldo total, con los 3 primeros parámetros sería suficiente, como respuesta tendrías el txid de la trx, el cual te da acceso a toda la información de cómo tu trx se está validando en la red

uptime

ejecutando este comando, como respuesta obtendrás el tiempo total que tu servidor ha estado ejecutándose en formato de segundos. así podrás controlar que tu nodo este arriba todo el tiempo

5/5

Puedes dejar una propina con el botón «Invítame un café».

O mediante Lightning network:

⚡[email protected]

También puedes hacerlo onchain, vía Paynyms de Samourai Wallet:

PayNym: +decentralized