Bitcoin Core

Bitcoin, como todo software OpenSource, tiene su código fuente, características y procesos definidos para que su comunidad lo haga crecer y evolucionar. Posee varias implementaciones y una de las más utilizadas es denominada Bitcoin Core.

Qué es Bitcoin Core

Bitcoin es un software OpenSource que al día de hoy posee cerca de 900 contribuyentes de todas partes del mundo que aportan su conocimiento en el proyecto y en las tecnologías que utiliza, como C/C++ y Python, para que el mismo continúe creciendo a partir de las propuestas.

Uno de los clientes de Bitcoin más populares es Bitcoin Core. No deja de ser un repositorio en GitHub que deriva del código fuente original que Satoshi Nakamoto entregó a mediados del 2011 para que la comunidad de desarrolladores continuaran con el proyecto.

El código fuente de Bitcoin

Que el código fuente de Bitcoin se encuentre en un lugar centralizado como lo es GitHub puede sonar extraño. La realidad es que Bitcoin, como cualquier software, necesita, no solo de un control de versiones tan poderoso como Git, también de transparencia, trazabilidad y comunicación entre los miembros que la plataforma ofrece.

Ningún software en el mundo podría existir si no hubiese un grupo de líderes en el proyecto. Bitcoin tiene los suyos, ingenieros expertos en su funcionamiento que llevan años trabajando en el mismo y que guían a los demás para desarrollar sobre el código fuente de Bitcoin a partir de un BIP.

El código fuente puede abrumar al principio, dado que es muy grande e incluye múltiples interfaces o herramientas para interactuar con la Blockchain de Bitcoin.

Interfaces Bitcoin Core

El repositorio de Bitcoin Core está compuesto por una serie de interfaces para interactuar con los datos de la Blockchain de diversas maneras, dependiendo el propósito y la necesidad como usuario final.

Interfaz red P2P

Bitcoin Core implementa un protocolo de mensajería P2P a través de TCP entre sus nodos para la comunicación y la sincronización de la información.

Los nodos pueden sufrir problemas de seguridad y de denegación de servicios que provocan que no puedan validar transacciones y, por lo tanto, no puedan operar. Sin embargo, Bitcoin Core implementa propuestas en su protocolo para evitar los ataque DOS.

Interfaz SPV

Simplified Payment Verification (SPV) o Verificación de Pago Simplificada permite la verificación de una transacción o la obtención del balance de una wallet sin necesidad de descargar la ledger completa de la Blockchain de Bitcoin.

La desventaja de SPV es su seguridad. No es posible la verificación de las transacciones con esta interfaz, ya que un tercero es quien hace entrega de la información y esta puede ser corrompida.

SPV se trata de un cliente ligero, ideal para dispositivos móviles o tablets, cuyo almacenamiento es más limitado y en donde solo requerimos realizar pequeñas transacciones.

Interfaz RPC/HTTP

Una de las interfaces más importantes de Bitcoin Core es la que permite el desarrollo de cualquier tipo de aplicación. Permite consultar datos a través del protocolo RPC (Remote Procedure Call) sobre HTTP.

El mismo funciona a través de un daemon (demonio) llamado Bitcoind. Un programa que corre en segundo plano y permite la ejecución de comandos utilizando el bitcoin-cli para la obtención de información y su posterior manipulación para construir aplicaciones como un explorador de Bitcoin.

Su funcionamiento es similar a una API, aunque técnicamente diferente. Los mineros utilizan esta interfaz para obtener información y construir los bloques.

Interfaz Qt

Bitcoin-qt es una de las interfaces más antiguas del proyecto con algo más de 10 años de existencia. La misma consta de un front-end para interactuar con la Blockchain, visualizar estadísticas básicas, interactuar con la información por medio del bitcoin-cli y de RPC y las funciones básicas de una wallet.

Esta interfaz está en desuso. Al tener RPC/HTTP, podemos verlo como un backend y construir aplicaciones web más sofisticadas y mejores funcionalidades.

Interfaz ZMQ

Las siglas MQ hacen referencia a servicios de mensajería y de entrega de notificaciones o push notificación. Este tipo de servicios se usan mucho en aplicaciones móviles para notificar con información sobre su cuenta.

ZMQ o ZeroMQ es el servicio que utiliza Bitcoin Core para el envío de notificaciones a los clientes a través de sockets. Múltiples clientes pueden conectarse a un socket para ser notificados cuando se crea un nuevo bloque, una transacción u ocurre un determinado evento en la Blockchain para actuar en consecuencia.

Esta interfaz es útil para desarrollar otro tipo de aplicaciones como Lightning Network que aprovecha esta característica para mantener su información actualizada con la red principal.

Concurrencia en Bitcoin Core

El funcionamiento de Bitcoin Core utiliza el poder de la concurrencia y la asincronicidad para lograr que múltiples subsistemas trabajen en paralelo.

La concurrencia le permite a Bitcoin Core realizar tareas simultáneas utilizando hilos de ejecución. Posee interfaces de validación que le permiten registrar callback para responder a eventos para, por ejemplo, enviar notificaciones con ZMQ.

En concurrencia existen múltiples procesos relacionados con las funcionalidades de la red.

Procesos de Bitcoin Core

Existen procesos para la verificación de scripts, para la carga de bloques, respuestas a llamados RPC o para la inicialización de conexiones de red, entre otros. Cada proceso utiliza N cantidad de hilos y es ejecutado por una tarea. Los hilos se cargan al iniciar Bitcoin Core para estar listos para su funcionamiento.

Sección en Bitcoin Core

Dentro de Bitcoin Core existen múltiples secciones para responder a todos los subsistemas e interfaces para que Bitcoin y todo su protocolo pueda funcionar.

El código fuente Bitcoin Core está dividido en secciones. Puedes encontrar cada una de ellas en el repositorio del proyecto.

Secciones Bitcoin Core

Partes más importantes del código fuente de Bitcoin:

  • net: base de todas las secciones, es donde se realiza toda la conexión P2P y todo el proceso de mensajería.
  • net_processing: responde a los eventos de mensajería de net.
  • validation: reglas que permiten validar cuál es la cadena con mayor poder de cómputo acumulado y agregar transacciones al mempool.
  • txmempool: implementación base del mempool de Bitcoin.
  • coins & txdb: implementación base para el funcionamiento de UTXO (salidas no gastadas).
  • script/: directorio que contiene scripts para la ejecución de tareas como la creación de transacciones.
  • consensus/: parámetros para el funcionamiento del consenso de Bitcoin.
  • policy/: estimación de las tarifas, existen empresas dedicadas solo a estos cálculos.
  • indexes/: creación de índices para la búsqueda de bloques o transacciones.
  • wallet/: billetera que no se suele utilizar en producción, pero nos sirve como base para desarrollar nuevas o hacer pruebas.

Entendiendo que por detrás del Bitcoin Core existen complejos mecanismos de concurrencia, multitareas y asincronicidad, puedes al menos entender mejor su funcionamiento y la obra de ingeniería de software qué es Bitcoin.

Qué es BIP o propuestas de mejora de Bitcoin

Los BIP, o Bitcoin Improvement Proposal, son documentos formales y estructurados para presentar mejoras al core de Bitcoin, ya sea mejoras técnicas, de organización, informativos o de otro tipo.

Las propuestas son analizadas por la comunidad por detrás de Bitcoin para su refinamiento, aceptación o rechazo. Cualquier persona en el mundo puede elaborar un BIP y el mismo será evaluado por la comunidad.

Bitcoin no es la única tecnología que implementa este tipo de procesos para la evaluación de propuestas y mejoras de un software OpenSource. Tal vez conozcas los EIP (Ethereum Improvement Proposal) que, si bien puede diferir en el proceso, tiene el mismo objetivo. Si salimos del mundo Blockchain, podemos encontrar el TC39 para las propuestas de mejora de Javascript.

Cómo es el flujo BIP

Los BIP tiene un flujo predefinido por el cual debe atravesar para ser implementado. Cada etapa define el estado del BIP.

Flujo de un BIP

  • Draft: estado ““borrador”” donde aún se continúa refinando la propuesta y se encuentra incompleto.
  • Deferred: el BIP se encuentra en pausa por algún motivo.
  • Accepted: el BIP fue aceptado y puede comenzar el debate de la comunidad sobre el mismo.
  • Rejected: el BIP fue rechazado por su comunidad por incongruencias, posibles problemas que pueda presentar al core de Bitcoin u otro motivo.
  • Withdrawn: estado ““retirado””. Los autores de la propuesta decidieron no continuar con la misma.
  • Final: en este estado, el BIP fue revisado y aprobado por la comunidad y se logró llegar a un consenso sobre la propuesta.
  • Replaced: el BIP fue reemplazado por otro BIP con una mejor propuesta o superadora.
  • Active: el BIP se encuentra activo, fue desarrollado el código fuente y el mismo se encuentra en producción o se implementó con éxito la mejora propuesta.

Los BIP tienen un proceso riguroso de aceptación. De haber controversias y problemas en la comunidad sobre la implementación o no de un BIP, el mismo puede generar un fork o bifurcación del proyecto.

Utilizaciones del Bitcoin Core

El Bitcoin Core es todo un sistema con sus partes. Dentro del mismo encontramos diversos usos:

  • Permite ser parte de una red P2P de nodos que se comunican entre ellos para validar transacciones, crear bloques y asegurar el consenso de la red.
  • Implementación de wallets para realizar transferencias y guardar valor en la misma.
  • Ofrece una interfaz programática a través de RPC que puede utilizarse vía HTTP o un CLI.
  • Bitcoin Core es la influencia número uno para el desarrollo de otras Blockchains.

Conclusión

El Bitcoin Core es la base de todo lo que hoy conocemos con el nombre de Blockchain. Aquella criptomoneda que Satoshi Nakamoto lanzó con el nombre de bitcoin en el 2009 y que al día de hoy ha evolucionado y se ha fortalecido hasta convertirse en este gran sistema económico.

Sin duda es solo el inicio y Bitcoin aún tiene mucho por crecer y por darle al mundo Blockchain como principal referente en este ecosistema de tecnologías Web3.


Post creado en colaboración con el Curso de Bitcoin de Platzi.