Todo sobre bitcoin (y por qué he decidido cogerle manía)
Esencialmente, un usuario de bitcoin puede hacer las mismas operaciones que un cliente bancario: ver su saldo, recibir bitcoins, transferir bitcoins. En ese aspecto, nada nuevo bajo el sol. Lo particular del caso es que, a diferencia del sistema bancario, sumamente centralizado, en el mundo del bitcoin operan multitud de agentes sin necesidad de una autoridad central.
En lo siguiente, al hablar del sistema, me estaré refiriendo a una red de computadoras que corren un software protocolizado (este protocolo es la ley, i.e., el conjunto de reglas, que rige bitcoin). Cualquier computadora conectada a internet y con el software adecuado puede sumarse al sistema si necesidad de otra certificación.
Los bitcoins del monedero de un usuario han nacido en algún momento y lugar (luego veremos cómo). Es posible trazar la ruta completa que realizaron desde que se originaron: está escrita en un libro. Ese libro ocupa actualmente unos 150GB. Si te interesa no te será difícil encontrar la manera de descargarlo.
Este libro está compuesto de bloques de 1MB de tamaño (aunque verás que hay discusiones sobre la posibilidad de incrementarlo). Cada bloque contiene unas 1000 transacciones. El sistema está diseñado, como veremos, para que se genere un nuevo bloque cada 10 minutos.
(¿Cuál es el número máximo de transacciones por hora que admite Bitcoin? ¿Cómo se compara con el de operaciones en bolsa, transacciones de tarjeta de crédito, etc.?)
Puedes ver los últimos bloques generados aquí. Esa página indica su número de orden dentro del libro (o altura), a qué hora se generó, quién lo generó (más sobre eso después), su tamaño y su hash. Si accedes a la página de uno de los bloques, verás las transacciones que contiene además de una serie de datos adicionales sobre los que volveremos.
Los usuarios de bitcoin envían transacciones al sistema que quedan en un limbo antes de ser confirmadas, i.e., escritas en el libro. Se pueden consultar el stream de transacciones que llegan al sistema y el número de las pendientes de confirmación en, p.e., aquí, una página que será del agrado de los estudiosos de la teoría de colas.
Los mineros se encargan de crear nuevos bloques. Los mineros tienen un incentivo natural y primario del que derivan otros: ganar dinero. Originariamente, en forma de bitcoins, claro. Así que tienen muy claro que no tienen ningún interés en subvertir el sistema. En particular, no tienen ningún interés en dar por buena ninguna transacción inválida (p.e., que alguien transfiera un bitcoin que no posee); mucho menos, en dar por buena una transacción inválida que pueda haber sido introducida subrepticia y dolosamente por otros mineros.
Es importante subrayar el asunto de los incentivos, que es en el fondo lo que hace que todo funcione correctamente. Por muy egoístas y malintencionados que sean los mineros, está en su interés seguir las reglas. Son una suerte de mano invisible, esa de la que algunos conomistas predican extravagantemente que es invisible simplemente porque no existe. Tal vez debieran reconsiderar su postura ante el evidente contraejemplo sintético que constituye el bitcoin. En todo caso, el tramposo pierde tiempo y dinero; su pecado se convierte en su misma penitencia. Luego veremos ejemplos.
A la vista del libro actual y de las transacciones pendientes de registrar, los distintos mineros se lanzan a una carrera para construir el siguiente bloque. Su incentivo consiste en:
- Empaquetar el mayor número posible de transacciones pendientes dentro del límite máximo de 1MB.
- Utilizar solo transacciones válidas (o el bloque sería rechazado).
- Priorizar aquellas transacciones que proporcionen mayores comisiones. En efecto, al realizar una transferencia, los usuarios sugieren una comisión para inducir a los mineros a tenerla en cuenta: a mayor comisión, mayor probabilidad de inclusión en el siguiente bloque.
- Capturar un premio de 12.5 bitcoins que el minero puede anotarse como recompensa por los servicios prestados. (Nota: actualmente son 12.5 bitcoins; antes fueron más y llegará un momento en que serán menos. La recompensa se reduce a la mitad cada cierto número de ciclos de manera que el número final de bitcoins en circulación nunca exceda los 21 millones).
En dinero contante y sonante, sumando la compensación y las comisiones, el premio por publicar exitosamente un bloque es actualmente, con el bitcoin en la órbita de los 7000 dólares, de unos cien mil euros.
Pero las condiciones anteriores, por sí solas, no bastan. En apenas unos milisegundos, miles de mineros de todo el mundo propondrían sus propios bloques y el sistema se colapsaría. Para evitarlo contempla un mecanismo muy ingenioso de gestión de la concurrencia.
Pero el problema de la concurrencia es un viejo conocido en el mundo de la informática y existen varias técnicas para gestionarlo: cerrojos, semáforos, etc. Bitcoin implementa una similar a la que (y describo de memoria) utiliza ethernet. Cuando en ethernet se producen interferencias porque dos tarjetas utilizan el canal simultáneamente, el protocolo establece que ambas tienen que abstenerse de emitir durante un periodo aleatorio de tiempo. Así hay una alta probabilidad de que cuando venza el plazo de la tarjeta a la que le correspondió el más breve, encuentre el cable expedito.
En el caso de bitcoin, los mineros se obligan a solo aceptar un bloque cuando exista prueba fehaciente de que permanecido congelado durante un tiempo aleatorio. Este tiempo aleatorio no puede ser asignado por una (inexistente) autoridad central; obviamente, los nodos tampoco pueden autoasignarse un tiempo de espera aleatorio porque, a diferencia de las tarjetas de ethernet que, se supone, cooperan, juegan en bandos enfrentados, i.e., compiten, y tienen todo el incentivo del mundo para que su espera sea, oh casualidad, siempre cero.
Para obligar a esperar a los nodos, estos reciben problema computacional cuyo tiempo de resolución es aleatorio. El primero en resolverlo publicará su bloque y la solución para dejar constancia de juego limpio. El resto, una vez validado, se lamerá las heridas, desistirá en su empeño, lo considerará añadido al libro y probará fortuna con el siguiente bloque.
El problema en cuestión, en forma simplificada, consiste en encontrar una solución para la desigualdad
$$ f(B_{n-1}, B_n, N) < d$$
donde:
- $latex f$ es una función positiva que involucra hashes (estilo SHA-256) de sus argumentos. De hecho, es un hash de sumas de los hashes de sus argumentos. Así que la manera más simple de describir el problema anterior vendría a ser algo así como encontrar un valor cuyo hash sea menor que cierto valor dado. O, incluso, sacrificando la precisión en aras de la concisión, invertir un hash.
- $latex B_n$ es el candidato a bloque $latex n$-ésimo que se busca proponer de acuerdo con las condiciones indicadas más arriba.
- $latex B_{n-1}$ es el bloque anterior. Esto es importante por un motivo y fundamental por otro. Importante porque impone la secuencialidad en el libro, i.e., impide que se ramifique. Pero es fundamental porque es la clave del consenso del sistema. La forma positiva que tiene el acto de aceptación de un bloque es, precisamente, que una mayoría de los mineros lo incorporan a sus cálculos. Un minero mohicano podría empeñarse en seguir minandon una cadena ajena al consenso, pero sería ignorado por el resto y los bitcoins que se asignase en su empeño solipsista valdrían solo para su autocontemplación.
- $latex N$ es un número, conocido en la jerga como el nonce, que puede ser elegido libremente por el minero.
- $latex d$, la dificultad, es un parámetro especificado por el sistema que gradúa la complejidad del problema para mantener estable el tiempo de búsqueda independientemente de la capacidad de cálculo del sistema. Obviamente, a menor $latex d$, mayor complejidad.
Y eso es esencialmente todo en una primera aproximación. No obstante, quiero añadir la respuesta que he encontrado a algunas preguntas razonables que me surgieron mientras leía sobre el asunto y cuya discusión más arriba habrían roto el hilo del discurso.
¿Es matemáticamente posible encontrar siempre una solución al problema de los hashes?
No neceariamente. Aventuraría que no. Desde luego, fijados $latex B_{n-1}$ y $latex B_n$ en la expresión $latex f(B_{n-1}, B_n, N)$ no porque $latex N$ tiene 4 bytes (un detalle no indicado antes) y el conjunto de imágenes es pequeño. De hecho, los mayores mineros, con una capacidad global de decenas de TH/s (terahashes), pueden explorar hoy en día, para $latex B_{n-1}$ y $latex B_n$ fijos todos los valores $latex f(B_{n-1}, B_n, N))$ en menos de un segundo. El hecho de que sigan tardando alrededor de diez minutos significa que se ven obligados a modificar el bloque candidato $latex B_n$ bastantes veces.
¿Puede haber todavía problemas de concurrencia?
Sí, y de hecho, los hay. En ocasiones se publican dos bloques válidos casi simultáneamente. Pero el interés por el consenso hace que el sistema se decante rápidamente por uno de los dos y el otro quede huérfano. Recuérdese que los mineros tienen incentivo para mantener una única libro.
¿Puede atacarse o crackearse _bitcoin?
Busca en internet y verás una lista de posibles ataques (p.e., esta), desde los de denegación de servicio hasta los que intentan introducir transacciones espurias. El menos preocupante de todos parece ser el del 51%, i.e., que un mismo minero controle la mayor parte de la capacidad de cálculo, con la intención de sabotearlo. Por razones puramente económicas, además: destruiría el valor del bitcoin, pasaría a controlar un sistema de valor exactamente cero.
¿Quiénes son los mineros?
Cualquiera puede minar bitcoins. Sin embargo, debido a la enorme capacidad de cálculo necesaria para garantizar una mínima probabilidad de éxito, los mayores actores del mercado y los que efectivamente se lo reparten, son los llamados pools. Los pools sindican la capacidad de cálculo de actores individuales, trocean la carga computacional y reparten las ganancias obtenidas entre los participantes.
¿Cómo es una mina de bitcoins?
Supongo que no todas son así, pero merece la pena leer esto.
Increíble lugar… pero eso consume mucha energía, ¿verdad?
Y que lo digas. Bitcoin produce una recompensa de unos cien mil euros cada 10 minutos. Para lograrla, los participantes del mercado queman la electricidad equivalente a la que produce un país como Nigeria.
Justo por eso he decidido cogerle manía.