Bitcoin

Bitcoin (signo: ; abr.: BTC, XBT) es una criptodivisa concebida en 2009. El término se aplica también al protocolo y a la red P2P que lo sustenta y de forma común se denomina como una moneda digital. Generalmente se usa «Bitcoin» para referirse a la red o al protocolo y «bitcoin» (plural: «bitcoines») para referirse a las unidades monetarias.
Bitcoin se caracteriza por ser descentralizado, es decir, no está respaldado por ningún gobierno ni depende de la confianza en un emisor central. Por el contrario, utiliza un sistema de prueba de trabajo para impedir el doble gasto y alcanzar el consenso entre todos los nodos que integran la red intercambiando información sobre una red no confiable y potencialmente comprometida (resuelve el problema de los generales bizantinos). De igual forma, las transacciones no necesitan de intermediarios y el protocolo es código abierto.
Bitcoin es un proyecto innovador en constante evolución y cambio. Si bien los desarrolladores recomiendan investigar cómo funcionan previo a invertir en ellos o abrir una cartera para utilizarlos, también consideran que tiene la capacidad de cambiar el mundo en términos económicos.
Desde la década de 1970, la utilización de firmas digitales basadas en criptografía de clave pública ha proporcionado un fuerte control de propiedad. Sobre la base de la criptografía de clave pública, en 1998 Wei Dai describe b-Money, una solución descentralizada al problema de pagos electrónicos. Posteriormente, Nick Szabo y Hal Finney extienden y complementan el trabajo de Wei Dai.
En 2008, Satoshi Nakamoto publica un artículo en la lista de criptografía de metzdowd.com donde describe el protocolo Bitcoin.
El 3 de enero de 2009 la red P2P de Bitcoin entra en funcionamiento con la publicación del primer cliente, de código abierto, y la creación de los primeros bitcoines. Hasta la invención de bitcoin era obligado que todos los pagos en el comercio electrónico se canalizaran a través de entidades centralizadas de confianza, generalmente bancos y otras empresas financieras, que gestionaban el seguimiento de todas las transacciones.
En otoño de 2015, el bitcoin aumentó su valor un 97%, superando los $490. El Financial Times realizó un estudio y concluyó que esa rápida tasa de crecimiento estaba asociada a la popularidad de las "redes socio-financieras" MMM del empresario ruso Sergéi Mavrodi.
Aunque existen monedas y billetes fabricados por particulares y empresas, normalmente para poder comerciar con bitcoines se utilizan programas cliente, que pueden ser aplicaciones nativas o aplicaciones web.
Las aplicaciones nativas se instalan o se ejecutan directamente en ordenadores o en dispositivos móviles. También pueden ejecutarse automáticamente cuando el usuario clica en un navegador web sobre un enlace que cumple con el formato del URI scheme de bitcoin según la especificación registrada en IANA.
"Bitcoin Core" es el único programa que implementa totalmente el protocolo, protegiendo la red, y se considera la referencia en la que se apoyan el resto de clientes existentes. "Bitcoin Core" necesita descargar completamente la cadena de bloques y almacenarla localmente, que a agosto de 2016 ocupa aproximadamente 80 GB, lo que puede llegar a tardar varios días. Su uso solo se recomienda para usuarios avanzados que deseen aportar a la estabilidad de la red.
Las aplicaciones web solo necesitan de un navegador, y por tanto están accesibles desde todas las plataformas, ya sean de escritorio (Windows, Linux, Mac OS X) o móviles (Android, iPhone, BlackBerry, tabletas, etc).
Algunas aplicaciones web proporcionan seguridad adicional en el acceso a los bitcoines mediante la utilización de autenticación de dos factores con mensajes SMS, correo electrónico, dispositivos específicos y Google Authenticator.
Existen plugins para la mayor parte de las plataformas de comercio electrónico, como WordPress, Drupal, Zen Cart, PrestaShop, Magento y otros.
A partir de una única semilla, algunos comerciantes generan «carteras deterministas» cuyas direcciones Bitcoin se pueden asignar a un pagador diferente para simplificar su seguimiento. Se utiliza el término «cartera determinista» para indicar que todas las direcciones de esa cartera están completamente determinadas por la semilla. Es decir, es suficiente con proteger la semilla para generar consistentemente la misma secuencia de direcciones Bitcoin de las que se tiene el control. Las direcciones generadas por una única semilla son virtualmente ilimitadas.
"Bitcoin Core" proporciona una API en JSON-RPC para acceder a la red Bitcoin. Es habitual que los desarrolladores prefieran programar en "modo regtest", que permite desarrollar en una cadena de bloques privada con control total del entorno, creación de transacciones con confirmaciones instantáneas y sin necesidad de gastar bitcoines reales.
"BitcoinJ" es una librería popular para el lenguaje Java. Se conecta directamente a la red Bitcoin, no necesita de entidades de confianza y descarga una versión reducida de la cadena de bloques. Forma parte del código de Multibit y del Bitcoin Wallet para Android y Blackberry OS. También se puede acceder a "BitcoinJ" en Ruby a través de JRuby.
"Pycoin" es una librería popular para Python.
"BitcoinJS" es una librería popular para Javascript. "Bitcore" proporciona una API para acceder a la red Bitcoin a través de Javascript y Node.js.
Todo participante de la red Bitcoin tiene una cartera electrónica que contiene un número arbitrario de claves criptográficas. A partir de la clave pública, se obtiene la dirección Bitcoin, que funciona como la entidad remitente y receptora para todos los pagos. Su clave privada correspondiente autoriza el pago solo para ese usuario. Las direcciones no tienen ninguna información sobre su dueño, son generalmente anónimas y no requieren de ningún contacto con los nodos de la red para su generación.
Las direcciones son secuencias alfanuméricas aleatorias de 33 caracteres de largo, en formato legible para personas, como puede verse en este ejemplo: codice_1. Utilizan una codificación en Base58, que resulta de eliminar los siguientes seis caracteres del sistema Base64: 0 (cero), I (i mayúscula), O (o mayúscula), l (L minúscula), + (más) y / (barra). De esta forma, se componen únicamente de caracteres alfanuméricos que se distinguen entre sí en cualquier tipo de letra. Las direcciones Bitcoin también incluyen un checksum de 32 bits para detectar cambios accidentales en la secuencia de caracteres.
Los bitcoines contienen la dirección pública de su dueño. Cuando un usuario "A" transfiere algo a un usuario "B", "A" entrega la propiedad agregando la clave pública de "B" y después firmando con su clave privada. "A" entonces incluye esos bitcoines en una "transacción", y la difunde a los nodos de la red P2P a los que está conectado. Estos nodos validan las firmas criptográficas y el valor de la transacción antes de aceptarla y retransmitirla. Este procedimiento propaga la transacción de manera indefinida hasta alcanzar a todos los nodos de la red P2P.
Todos los nodos que forman parte de la red Bitcoin mantienen una lista colectiva de todas las transacciones conocidas en una cadena de bloques. Para ello los nodos generadores de los bloques, también llamados "mineros" meten en la cabecera de dichos bloques el hash del último bloque de la cadena más larga de la que tienen conocimiento, así como las nuevas transacciones publicadas en la red. Cuando un minero encuentra un nuevo bloque, lo transmite al resto de los nodos a los que está conectado. En el caso de que resulte un bloque válido, estos nodos lo agregan a la cadena y lo vuelven a retransmitir. Este proceso se repite indefinidamente hasta que el bloque ha alcanzado todos los nodos de la red. Por tanto la cadena de bloques contiene el historial de posesión de todas las monedas desde la dirección-creadora a la dirección del actual dueño. Por lo tanto, si un usuario intenta reutilizar monedas que ya usó, la red rechazará la transacción.
Bajando un poco el nivel de abstracción, los mineros rastrean las transacciones (los pagos) y los agrupan en bloques, cada bloque tiene la siguiente estructura:
La generación de bloques se conoce en inglés como "mining" y puede traducirse al español como "extracción" por analogía con la minería del oro. Todos los mineros de la red están compitiendo para ser el primero en encontrar la solución al problema criptográfico de su bloque-candidato actual, mediante un sistema de pruebas de trabajo, resolviendo un problema que requiere varios intentos repetitivos, por fuerza bruta, no determinista, de manera que se evita que mineros con gran nivel de procesamiento dejen fuera a los más pequeños. De esta forma, la frecuencia de localización de cada bloque sigue una distribución de Poisson y la probabilidad de que un minero lo encuentre depende del poder computacional con el que contribuye a la red en relación al poder computacional de todos los nodos combinados, lo que permite que el sistema funcione de manera descentralizada. Los nodos que reciben el nuevo bloque solucionado lo validan antes de aceptarlo, agregándolo a la cadena. La validación de la solución proporcionada por el minero es trivial y se realiza inmediatamente.
El objetivo concreto de los mineros es buscar un nonce correcto para el bloque de forma que el bloque completo satisfaga cierta condición. Esta condición es que el hash SHA-256 del bloque tenga un cierto número de ceros iniciales. 
Todo este proceso de prueba-error es simplemente para hacer difícil la generación de bloques. Podría usarse cualquier otro mecanismo. La energía usada para reintentar hasta encontrar el nonce se pierde para siempre. Es simplemente una prueba de trabajo. Normalmente para hallar un nonce se comienza en 0 y se va incrementando en uno cada hash hasta que se desborda el valor del nonce (4 bytes). Cuando se desborda se varía el valor de hash de la raíz del árbol de Merkle.
Según el protocolo solo debe salir un bloque válido cada diez minutos independientemente de cuánto trabajo haga la red. Así que la red tiene que actualizar la dificultad de forma que los futuros bloques requieran condiciones más o menos estrictas. Para calcularlo se mide el tiempo que se tardó en encontrar los últimos 2.016 bloques, se compara con el tiempo de 20.160 minutos. Se calcula de este modo la relación entre el intervalo de tiempo real y el intervalo de tiempo y realiza el ajuste correspondiente de la dificultad, hacia arriba o hacia abajo. Al ser la red Bitcoin una red descentralizada de nodos, la reasignación de la dificultad se produce de forma automática y en cada nodo independientemente. Cada 2.016 bloques, todos los nodos reorientan la dificultad
Para evitar la volatilidad extrema en la dificultad, el ajuste de reasignación de la dificultad como máximo puede ampliarse en cada ciclo de 2016 bloques por un factor de cuatro. Por ello, si se da el caso de que la dificultad requerida durante un ciclo es mayor que un factor de cuatro, se ajustará por el máximo, pero nunca más. Cualquier otro ajuste se llevará a cabo en el próximo ciclo. Esto evita la volatilidad extrema en la dificultad, pero como consecuencia, provoca también que las grandes discrepancias entre el poder de hash y la dificultad puedan tardar varios ciclos en equilibrarse.
En la dificultad actual, la posibilidad de un hash tener éxito es un poco menos de uno de cada