¿En qué consiste la implementación de un nodo completo de Bitcoin? (Spanish)

A menudo veo en los medios mucha confusión sobre lo que realmente *es* la implementación de un nodo completo de Bitcoin. Me pareció que este era un buen momento para tratar de desglosar el tema de una forma comprensible, y todo en un mismo lugar. Espero que esto ayude a salir de cualquier confusión. Quería agradecer especialmente a Matt Corallo (desarrollador Core) y a mis compañeros de Purse por ayudarme a redactar los primeros borradores para publicar esto lo antes posible. 🙂

¿Qué es un nodo completo? ¿Qué permiten hacer?

Un nodo completo de Bitcoin, a grandes rasgos, puede actuar como columna vertebral de la red de Bitcoin, incluso cuando se desconectan todos los demás nodos. Los nodos completos, por definición, deberían poder cumplir a rajatabla las características reglas del protocolo Bitcoin. Dicho esto, los criterios que definen los diferentes tipos de nodos validadores completos de la red no varían mucho; aunque, en la mayoría de los casos, existe un estándar universalmente aceptado.

Resumiendo, un nodo completo efectivo verificará cada bloque de transacciones entrantes que reciba para asegurarse de que cada elemento de ese bloque sea completamente validado (según las reglas consensuadas); esto le permite a un nodo completo confiar en la integridad total del bloque, sin confiar expresamente en el minero.

Para que se cumpla el conjunto de reglas consensuadas de Bitcoin, tu nodo completo tendrá que validar lo siguiente:

  • Verificar que las transacciones de cada bloque disponen de todas las firmas necesarias para el bitcoin que se esté gastando.
  • Asegurarse de que cada bloque crea un número determinado de bitcoins por bloque (limitado actualmente a 12,5 BTC).
  • Comprobar que las transacciones o los bloques se presenten en el formato adecuado.
  • Verificar que, en la cadena de bloques, ningún destino de transacción se haya empleado por partida doble.

Los nodos completos, como vimos antes, (hay otras reglas también, pero no vienen a colación en este artículo) son realmente participantes activos de la red Bitcoin. Estos nodos se encargan en todo momento de comprobar que las transacciones o los bloques estén siguiendo cada una de las reglas consensuadas. También tienen la tarea de transmitir bloques a otros nodos completos de la red (si el reenvío de puertos está activado –hablaremos de ello más adelante–; aunque no es un requisito indispensable para considerarse un nodo completo). Estos son los elementos que garantizan que la cadena de bloques de Bitcoin permanezca inmutable (inalterable), y su seguridad, intacta.

El tamaño de la base de datos de una cadena de bloques, una vez completamente descargada y validada, es actualmente de ~110gb (haz clic aquí para ver un historial de sus dimensiones).

Puesto que no hay una especificación oficial de Bitcoin hasta el momento, el cliente de referencia (conocido como “Bitcoin Core”) es al que suelen recurrir la mayoría de los desarrolladores de Bitcoin. Esto permite que la implementación se mantenga en todos sus parámetros, y no se bifurque de la red.

Requisitos facultativos: algunos nodos completos ayudan a transmitir información de transacción a otros nodos, y suelen ser ejecutados por servicios como intercambiadores, navegadores de bloques y mineros (llamados comúnmente “Nodos económicos completos”).

Servicios de redes P2P
 Los nodos completos, a pesar de validar también las reglas consensuadas, pueden ofrecer otros servicios a los participantes activos en las redes P2P.

Estos servicios adicionales juegan un papel importante en la seguridad de los nodos de poco peso (clientes SPV) a la hora de asegurar que la información de las transacciones sea precisa, pues no procesan la cadena de bloques en su totalidad, sino que consultan un nodo completo para sincronizar debidamente.

Estos son algunos de los servicios que pueden ofrecer los nodos completos:

  • Presentar datos históricos válidos sobre las cadenas de bloques a los nuevos nodos que se estén sincronizando con la red, para así mantenerse al día; por lo tanto, han de guardar una copia de seguridad completa y reciente de la base de datos de transacciones de Bitcoin.
  • Transmitir nuevas transacciones en la red y ayudar a difundirlas desde los usuarios ← →mineros, a otros nodos activos de la red.
  • Filtrar/validar todas las transacciones de entrada y de salida de las redes, para que los nodos SPV (clientes de poco peso) puedan también validar la red sin tener que descargar cada transacción que se haya realizado en la red para encontrar/procesar sus propias transacciones.
  • Minar; en un principio, este era el factor clave de la base de datos Bitcoin Core. Desde entonces, la minería Bitcoin ha avanzado hasta la incorporación de chips ASIC. A pesar de que, en teoría, un nodo completo podría minar también, este requisito se ha descartado como atributo esencial. Ahora solo los mineros suelen preocuparse por que los nodos completos sean compatibles con la minería (como Bitcoin Corey Bcoin).

El grueso de estos servicios se ofrece mediante los nodos completos, después de que hayan activado las conexiones entrantes al reenviar el nodo al puerto 8333. Cuantos más nodos completos acepten las conexiones entrantes, más segura/descentralizada será la red de Bitcoin en su totalidad. Los nodos se pueden ejecutar por particulares o empresas. Sin embargo, muchos servicios optan a menudo por ejecutar nodos completos en la nube también (por ejemplo, AWS/Google Cloud). Al ejecutar un nodo completo en la nube, las empresas o los desarrolladores se aseguran de que obtienen un nodo fijo que archive/guarde constantemente toda la cadena de bloques para examinarla en cualquier momento.

Siempre podrás ver el número de nodos activos y reenviados en la red mediante sitios como Bitnodes o NodeCounter. No obstante, es importante saber que algunas personas (particulares que buscan privacidad) no comulgan con la idea del reenvío de puertos; o tal vez para ellas el ancho de banda es muy caro en su localidad. Podemos hacer una buena estimación, pero, para la mayoría, el número total real de nodos activos es… desconocido. ¡Y no hay problema! La descentralización de Bitcoin no depende del conocimiento de lo que hace cada uno con sus carteras. :)

Los puertos abiertos ayudan a la red Bitcoin a iniciar nuevos nodos mediante la carga de bloques históricos en nuevos nodos que se encuentren sincronizándose. Las redes P2P de Bitcoin permiten que la resistencia a la censura sea un poco más llevadera; siempre y cuando exista en alguna parte una copia de los registros (sea en un servidor o en una red descentralizada no censurable), Bitcoin seguirá su curso prosperando.

Ventajas de ejecutar un nodo completo

Ante todo, seguridad. Los nodos SPV no procesan toda la cadena de bloques, lo que supone un riesgo si se aceptan transacciones o bloques no validados. A menos que un servicio específico esté ejecutando simultáneamente un nodo completo de validación consensuada para cotejar sus propias transacciones, ciertos bloques o transacciones podrían ser procesados de manera automática, y causar daños o pérdidas para el servicio/usuario.

Privacidad; al ser tu propio banco, tienes un total control financiero. Ejecutar un nodo completo ayuda a mantener tus transacciones lo más privadas posibles (recuerda: la cadena de bloques pública es…pública). La mayoría de las carteras y servicios basados en aplicaciones web usan nodos SPV, lo que significa que necesitan de una fuente externa de terceros para llevar a cabo el proceso de verificación (esto incluye tus direcciones 😧). Esos servicios reconocen tus direcciones, y pueden, sin mucho esfuerzo, relacionarlas para descubrir la propiedad de los fondos en esas cuentas. Para exprimir al máximo la red Bitcoin, deberías ejecutar un nodo completo.

Conclusión

Los nodos completos son fundamentales para la red Bitcoin. Estas son algunas de las implementaciones de nodo completo de Bitcoin más distinguidas/usadas capaces de validar en su totalidad la red, como hemos hablado anteriormente: NBitcoin (C#), btcd (Go), bitcoind (C++), y ahora, y bcoin (Node.js). La proliferación y la adopción de este número de implementaciones son un componente indispensable para mantener descentralizado el desarrollo de Bitcoin, con el mayor número de expertos técnicos en la materia en todo el mundo como sea posible.

Referencias:
 https://en.bitcoin.it/wiki/Full_node
 https://en.bitcoin.it/wiki/Clearing_Up_Misconceptions_About_Full_Nodes