# Bitcoin Core

Bitcoin Core (en español nucleo de Bitcoin) es un proyecto de código abierto, implementación de referencia para nodos de Bitcoin (BTC) y una cartera capaz de verificar pagos en bitcoins de forma autónoma. También conocido como cliente de satoshi, es una continuación directa del cliente original de bitcoin lanzado por Satoshi Nakamoto (rebautizado luego como "Bitcoin Core").
Ha sido el cliente más usado por "nodos completos" en toda la historia de la red Bitcoin. Recibe contribuciones de contribuidores casuales y es mantenido por un equipo de desarrolladores denominados "mantainers" (mantenedores) con Wladimir J. van der Laan dirigiendo el proceso de lanzamiento. Algunos de sus desarrollos han sido financiados por la Digital Currency Iniciative del MIT.
El proyecto también mantiene software relacionado como la biblioteca de criptografía libsecp256k1.

## Características

El cliente de Bitcoin Core incluye un motor de verificaciones de transacciones y se conecta a la red en forma de nodo completo. IIncluye por defecto una cartera de bitcoin que le permite recibir y enviar fondos y generar códigos QR.
Almacena y valida el registro de transacciones entero de la cadena de bloques, de más de 492 gigabytes para octubre de 2022, el cual debe descargar para sincronizarse antes de poder interactuar con la red a pesar de que la no necesita la blockchain completa para ello desde que le es posible de correr en pruning mode.
Contiene un daemon para uso mediante línea de comandos y llamadas a procedimientos remotos denominado bitcoind. También proporciona acceso a testnet, un entorno de pruebas global que imita la red principal de bitcoin usando una blockchain alternativa donde se usan monedas denominadas "bitcoin testnet" que carecen de valor en el mercado. A través de un modo de pruebas denominado Regtest o Regression Test Mode el programa es capaz de crear una blockchain privada bajo las mismas reglas que la testnet de bitcoin evitando la interacción con pares y bloques aleatorios. Adicionalmente contiene un sencillo programa que permite a los usuarios enviar comandos RPC a bitcoind llamado bitcoin-cli.
Contiene algunos puntos de control codificados para impedir ataques DDoS contra nodos, especialmente durante la etapa de sincronización y un límite máximo del tamaño de los bloques de 1 MB agregado en 2010 por Satoshi Nakamoto, el cual limita la capacidad máxima de la red a aproximadamente tres transacciones por segundo. Ha recibido mejoras de rendimiento así como un aumento "de facto" del tamaño de los bloques propiciado por la implementación de SegWit. Contenía un sistema de alerta incluido por Satoshi Nakamoto como forma de informar a los usuarios noticias importantes relacionadas con Bitcoin, pero este fue eliminado oficialmente en noviembre de 2016.
Incluye un lenguaje de scripting inspirado en Forth que puede definir transacciones y especificar parámetros. Se suele usar ScriptPubKey para "bloquear" transacciones basadas en un conjunto de condiciones futuras. ScriptSig es usado para conocer estas condiciones o "desbloquear" una transacción. Las operaciones en la data son realizadas por varios OP_Codes (en español códigos operacionales). Se usan dos stacks, main y alt. El llooping está prohibido.
Bitcoin Core usa OpenTimestamps para sellar el tiempo en Git de las actualizaciones de su código fuente.

## Desarrollo

Satoshi Nakamoto, el creador original del cliente declaró a través de correo electrónico enviado a la lista de correo cryptography que comenzó a escribir el código primero para convencerse de que podría resolver los problemas que se presentasen en el desarrollo de su sistema. Luego de eso, habría escrito el whitepaper (documento técnico) de bitcoin. Aunque la mayoría de los participantes de la red utilicen Bitcoin Core, la influencia de sus desarrolladores se ve limitada por la elección voluntaria de las personas sobre que implementación del protocolo usar. Desde que asumió funciones el 8 de abril de 2014, el desarrollador líder del proyecto es Wladimir J. von der Laan, Gavin Andresen fue el desarrollador líder anterior, pero abandonó el rol en función para dedicarse al desarrollo estratégico de su tecnología.
El código fue almacenado inicialmente en Sourceforge antes de su puesta a disposición en GitHub. Debido a que no existe una estructura formal, el desarrollo de Bitcoin Core se basa en torno a las Propuestas de Mejora de Bitcoin (Bitcoin Improvement Proposals), también conocidas como BIPs, las cuales funcionan de forma similiar a Request for Comments. Para examinar y discutir las expresiones iniciales de ideas se usan listas de correo. Cuando suficiente apoyo se muestra en torno a una BIP, esta se formaliza con la creación de un documento. Este es el procedimiento estándar para compartir ideas y obtener feedback de la comunidad en torno a la mejora de bitcoin y fue iniciado por Amir Taaki en 2011.

## Historial de versiones

La versión 0.1 fue liberada el 9 de enero de 2009 por Satoshi Nakamoto con soporte solamente para Windows. Este lanzamiento fue seguido por algunas versiones cuyo objetivo era arreglar algunos errores menores. El 16 de diciembre de 2009 se libera la versión 0.2, la cual incluía por primera vez una versión para Linux y soportaba el uso de minería multi-procesador. En la versión 0.3.2 Nakamoto incluyó puntos de control como medida de seguridad.
Luego de la liberación de la versión 0.3.9, su creador, Satoshi Nakamoto, dejó el proyecto, y poco después dejó de participar definitivamente en foros en línea. Desde ese momento el desarrollo del software era fue asumido por un amplio grupo de desarrolladores independientes al que se suere referir como una comunidad, emuchos de los cuales han planteado ideas de como mejorar el protocolo.
Entre 2011 y 2013 nuevas versiones del software fueron lanzadas a través del portal Bitcoin.org. Los desarrolladores querían diferenciarse como creadores de software en lugar de defensores de bitcoin, por lo que ahora destinan el portal bitcoincore.org sólo para el software.
La versión 0.5.0 de Bitcoin-Qt fue lanzada el 1 de noviembre de 2011. Introdujo un front end que utilizaba el toolkit de interfaz de usuario Qt. El software anteriormente utilizó Berkeley DB para administración de base de datos. Los desarrolladores cambiaron a LevelDB al lanzar la versión 0.8 para reducir el tiempo de sincronización con la blockchain. La actualización a esta versión dio como resultado en una bifurcación menor el 11 de marzo de 2013, el cual fue resuelto al poco tiempo. El sembrado de nodos a través de IRC fue descontinuado en la versión 0.8.2. Con este lanzamiento las comisiones por transacción, también conocidas como costes de retransmisión, se redujo de 50.000 satoshis a 10.000 satoshis.
A partir de la versión 0.9.0 el software fue rebautizado como Bitcoin Core. Los costes de transacción fueron reducidos de nuevo en un factor de diez como medio para fomentar las microtransactions. A pesar de que Bitcoin Core no utiliza OpenSSL para la operación de la red, el software utilizó OpenSSL para llamadas de procedimiento remoto. La versión 0.9.1 fue lanzada para remover la vulnerabilidad de la red al Heartbleed.
La versión 0.10 fue hecha pública el 16 de febrero de 2015. Introdujo una biblioteca de consenso qué dio programadores acceso fácil a las reglas que gobiernan consenso en la red. En versión 0.11.2 los desarrolladores añadieron una nueva característica que permitió hacer no gastables determinadas transacciones hasta un momento concreto en el futuro. Bitcoin Core 0.12.1 fue liberado el 15 de abril de 2016 y habilitó múltiples soft forks al mismo tiempo. Alrededor de 100 colaboradores trabajaron en Bitcoin Core 0.13.0, el cual fue liberado el 23 de agosto de 2016 e introdujo más de diez cambios significativos.
En julio de 2016 fue activado CheckSequenceVerify a través de un soft fork.
En octubre de 2016, Bitcoin Core 0.13.1 presentó el soft fork Segwit, cuyo objetivo era servir como una mejora en el escalado que apuntaba a optimizar el espacio en los bloques en Bitcoin sin aumentar el tamaño de los mismos. Esta característica fue originalmente terminada en abril, y 35 desarrolladores se comprometieron a desplegarlo. Este lanzamiento presentó a SegWit con el objetivo de bajar la presión al alza sobre las tarifas de transacción así como incrementar la capacidad máxima de la red para procesar transacciones. La versión 0.13.1 soportó búsqueda y testaje extensos que dirigen a algunos retrasos en su fecha de liberación. Además, el uso de SegWit impide la explotación de varias formas de ataques de maleabilidad de transacciones.
Lanzado en febrero de 2018, la versión 0.16.0 da soporte al uso de un formato de direcciones nativo para SegWit, también llamado formato de direcciones bech32, el cual fue originalmente desarrollado por Peter Wuille y Greg Maxwell.
En septiembre de 2018, un desarrollador de Bitcoin Cash descubrió la vulnerabilidad CVE-2018-17144 en el software de Bitcoin Core,a la cual podría permitir a un atacante de explotar un error en nods Bitcoin Core vulnerables y superar el límite de emisión de 21 millones de monedas.