Bitcoin y el tiempo
“El tiempo no es oro; el tiempo es vida.”
José Luis Sampedro[1]
Ya Aristóteles consideraba que el tiempo no existe en sí mismo, sino que es una medida de cambio, la medida del movimiento entre dos instantes, en relación con lo precedido y lo que sucederá[2], el antes y el después. En esta línea, el diccionario de la RAE lo define en su primera acepción como “duración de las cosas sujetas a mudanza”[3]. Mucho se ha escrito sobre este particular concepto y, ciertamente, sigue siendo uno de los grandes misterios de la física y uno de los principales interrogantes para la filosofía.
En cualquier registro, ya sea histórico, científico, contable o de cualquier otro tipo, la información se suele presentar en una secuencia temporal, de forma que el tiempo es la medida que nos permite establecer el orden de esa secuencia, ya sea mediante fechas, horas, segundos o cualquier otra unidad de medida temporal. Sin el tiempo, sería difícil o imposible establecer un orden en un registro, y la información que contuviera sería confusa o inútil.
La manera en que Bitcoin calcula el paso del tiempo y, por tanto, el orden de los acontecimientos (transacciones) que se incorporan en los eventos (bloques) que suceden en su red, es de una importancia capital para su funcionamiento y supervivencia. Bitcoin crea un mecanismo de consenso sobre el manejo del tiempo mediante diversas herramientas, solucionando el problema de los generales bizantinos, pues, como Gigi explica de forma muy sintética en Twitter[4], el problema de los generales bizantinos es un problema de coordinación, que es otra forma de decir un problema de tiempo. Bitcoin lo resolvió creando su propio sentido del tiempo que cualquiera puede verificar de forma independiente.
Fuera de los círculos de expertos informáticos, rara vez se analiza la forma en que Bitcoin cuenta el tiempo, algo que, como digo, es de una importancia capital para su funcionamiento. Gigi tiene un extenso capítulo (Bitcoin is time) de su próximo libro[5] que se ocupa de estas cuestiones cuya lectura es muy recomendable.
Este autor pone de manifiesto que el dinero es esencialmente una herramienta para realizar un seguimiento de quién le debe qué a quién. Y este seguimiento se puede hacer de dos formas: mediante fichas (monedas) o mediante un libro mayor[6]. El primer método, una ficha física, representa directamente el estado de las cosas. El segundo, un libro mayor, refleja indirectamente el estado de las cosas. Cada sistema tiene sus ventajas e inconvenientes, pero dado que nos movemos en un entorno digital, la utilización de fichas físicas es una opción que descartamos.
El tiempo de Bitcoin, aunque se gesta en operaciones previas, nace en la práctica cuando se mina un bloque mediante la prueba de trabajo. Como indica Gigi, la prueba de trabajo, que da lugar al bloque minado, no es el registro de un evento, es el evento en sí mismo[7]. Y el tiempo u hora, que podríamos asimilar al nº de bloque, se determina mediante la prueba de trabajo que, en principio, está desconectada de todas las posibles entradas externas (como lecturas de relojes) y está basada en una sola cosa: la computación requiere trabajo y el trabajo requiere tiempo y energía. Por tanto, la robustez de Bitcoin reside en el consumo de tiempo (humano) y energía. Esas son las dos importantes anclas de Bitcoin en nuestro mundo físico.
Gracias a la prueba de trabajo, Bitcoin consigue crear su propia realidad junto con su propio tiempo y espacio, pues, aunque parezca un galimatías: “no hay forma de confiar en que los datos representan la realidad, excepto si la realidad en cuestión es inherente a los datos mismos.” Y eso lo consigue Bitcoin gracias a la prueba de trabajo.
Como se ha apuntado, Bitcoin no es totalmente ajeno a nuestro tiempo, con el que se relaciona mediante dos mecanismos, uno se refiere al ajuste de dificultad del minado y el otro está relacionado con las medidas de seguridad implantadas en relación con la validación de bloques y el funcionamiento de los nodos.
Ajuste de la dificultad de minado
El mecanismo del ajuste de dificultad hace que se mantenga la relación entre el tiempo de Bitcoin y el nuestro, una relación que Gigi califica como “delgado hilo” pero de una importancia capital. A menudo se pone énfasis en la energía, pero el hecho de que para minar un bloque, por mucha energía que utilicemos, se necesitarán de promedio 10 minutos de trabajo -como digo, aunque pudiéramos usar toda la energía del sistema solar- es una pieza esencial del funcionamiento de Bitcoin para que pueda operar como sistema de almacenamiento y transmisión de valor. Podemos conseguir más energía, pero no más tiempo (humano). Si no existiera ese ajuste, la velocidad de generación de bloques adquiriría tal nivel que sería imposible ponerse de acuerdo en la ordenación de los eventos y, por tanto, en la coordinación de la red.
Es conocido, más o menos, que la red Bitcoin verifica el tiempo “real” que se tardó en minar los últimos 2.016 bloques de la cadena y lo compara con 20.160 minutos, para ajustar la dificultad a 10 minutos por bloque de media. Y esa es una tenue pero poderosa conexión de Bitcoin con nuestra concepción del tiempo.
La pregunta que surge es: ¿cómo mide el protocolo de Bitcoin el tiempo “real” en que se han minado los 2.016 bloques? ¿Hay alguna referencia a algún “oráculo” de tercero?
Pues sí y no. Bitcoin implica la creación de un reloj descentralizado que no tiene por qué depender de ningún oráculo externo, aunque en la práctica se recurra a ellos por parte de los dispositivos que contienen los nodos conectados a la red para que pueda funcionar el mecanismo de ajuste de la dificultad. Por tanto, son los nodos los que actúan a modo de oráculo descentralizado, proporcionando a la Red de Bitcoin la necesaria referencia temporal con nuestro tiempo humano.
Para entender cómo Bitcoin lidia con el tiempo tenemos que aclarar unos conceptos:
Hora/tiempo del sistema. Con esta expresión nos referimos a la hora que proporciona el reloj interno de un dispositivo o sistema informático que se utiliza para sincronizar procesos y eventos, como la máquina que alberga un nodo de Bitcoin.
Los dispositivos informáticos pueden usar distintos tipos de relojes para fijar la fecha y hora, dependiendo de la configuración y las opciones disponibles. Una de las fuentes de tiempo de referencia más comunes a las que se conectan los dispositivos informáticos son los
Servidores de tiempo de red, entendiendo por tales los dispositivos que se conectan a una red de computadoras y proporcionan una referencia de tiempo precisa y confiable para todos los dispositivos conectados a la red. El servidor de tiempo de red más utilizado en los dispositivos informáticos que se conectan a Internet es el protocolo Network Time Protocol (NTP), que forma parte del protocolo TCP-IP desde hace mucho tiempo. NTP es un protocolo estándar de Internet para sincronizar el reloj interno de un dispositivo con una referencia de tiempo precisa y confiable. NTP se basa en un conjunto de servidores de tiempo de red distribuidos por todo el mundo, que se sincronizan entre sí y proporcionan una referencia de tiempo precisa a los dispositivos que se conectan a ellos. Hay muchos servidores de tiempo NTP disponibles en Internet que los dispositivos pueden usar para sincronizar su reloj interno. Algunos de los servidores de tiempo NTP más populares son los de la red de servidores de tiempo de la Fundación NTP (NTP.org), la red de servidores de tiempo de la Administración Nacional Oceánica y Atmosférica de EE. UU. (NOAA), y la red de servidores de tiempo de la Agencia Espacial Europea (ESA), entre otros.
Tiempo/hora ajustado a la red (de Bitcoin). Normalmente, las redes informáticas se ponen de acuerdo en fijar un tiempo único para todos los dispositivos conectados, es decir, sincronizan sus relojes. Pero en el caso de la red de Bitcoin no es así. Cada nodo calcula el tiempo que usará en la red Bitcoin, de forma que puede haber y hay divergencias entre los mismos. Y estas diferencias, siempre dentro de unos límites, son irrelevantes para lo que podemos llamar el tiempo de Bitcoin, que no es sino la secuenciación de los bloques. En inglés, este tiempo que calcula cada nodo se le denomina “network-adjusted time”, que podríamos traducir como “tiempo ajustado a la red”.
Cada máquina que albergue un nodo tiene su tiempo de sistema, que podrá determinarlo, o no, conforme al protocolo NTP. Nada impide que la máquina que albergue el nodo determine la hora del sistema mediante otra técnica. Pero esa no es la hora que tiene en cuenta la red de Bitcoin.
Cada nodo determina la hora que usará en la red de Bitcoin calculando la mediana de los tiempos que le han comunicado los nodos a los que está conectado. Este tiempo de red, al que suele denominarse tiempo ajustado a la red (network-ajusted time) es el que se usa para la generación o minado de nuevos bloques y su validación por los nodos. En síntesis, hay tres medidas de seguridad fundamentales incorporadas al protocolo para asegurar su integridad.
Medidas de seguridad
La primera medida de seguridad es que si la mediana de los tiempos que comunican los nodos conectados a un nodo particular (tiempo ajustado a la red) difiere en más de 70 minutos de la hora del sistema, entonces el nodo rechaza ajustar el tiempo del sistema con el de los nodos conectados y solicita la intervención del usuario[8]. Por defecto, el nodo considerará como válida la hora fijada por el reloj del sistema.
La segunda es que los nodos rechazan cualquier bloque que tenga una marca de tiempo que supere las 2 horas de la hora de la red Bitcoin que indica el nodo (tiempo ajustado a la red).
La tercera es que también se rechazan los bloques con marcas de tiempo anteriores a la mediana de tiempo de los últimos 11 bloques[9]. A una tasa de confirmación de 10 minutos por bloque, equivaldría a una hora desde la marca de tiempo del bloque minado[10].
En conjunto, estas medidas tienen como objetivo evitar que se agreguen bloques falsos o maliciosos a la cadena de bloques con marcas de tiempo incorrectas que puedan dañar o comprometer la integridad de la red. Al rechazar los bloques con marcas de tiempo incorrectas, se asegura que la cadena de bloques se mantenga coherente y se previene cualquier intento de ataque o manipulación.
Desde prácticamente sus orígenes, se ha discutido mucho en la comunidad[11] sobre la posibilidad de un ataque de tiempo (timejacking), como muestra este artículo de 2011[12], y el debate sigue hasta fechas recientes.[13]
Si los servidores de tiempo a los que recurren los nodos para fijar la hora del sistema están muy centralizados, podría verse ahí un riesgo. Pero un ataque a estos servidores de tiempo difícilmente harían peligrar a Bitcoin a medio y largo plazo y, de todas formas, causaría más problemas a otros sistemas críticos que no a la red de Bitcoin.
Como decimos, esto es algo sobre lo que la comunidad ya discutía en 2011, como por ejemplo en el foro de bitcoin.org[14]. En algún momento, Satoshi consideró usar NTP como una tercera fuente de tiempo para decidir entre el tiempo de la red y el tiempo de sistema cuando estos eran muy distintos. Esa tercera fuente de tiempo, que nunca fue implementada, es lo que se sustituyó por una advertencia solicitando la intervención del usuario.
En una concepción que nos recuerda mucho Aristóteles[15], la red de Bitcoin crea su propio tiempo descentralizado y probabilístico (usando la terminología de Gigi) con su propia unidad temporal, alineando los incentivos para que los participantes en red se comporten de manera honesta, los eventos (bloques) que suceden en su red se registren de forma correcta y su vida se mantenga. El principal punto en que Bitcoin necesita tener en cuenta al tiempo humano es para el mecanismo del ajuste de dificultad, que asegura que la prueba de trabajo, además de energía, tenga que hacer uso del tiempo como los humanos lo concebimos y vivimos. Otra relación con nuestro tiempo se encuentra referida al funcionamiento de los nodos y validación de bloques conforme las medidas antes expuestas.
Pero lo explicado es algo que se aplica a los bloques. Antes de generarse un bloque, las transacciones están en la piscina “atemporal” (desde el punto de vista de Bitcoin) de la mempool[16]. Así, la mempool podría asemejarse al “ahora” aristotélico en el sentido de que “no debe ser considerado como una parte del tiempo”[17] y que, dividiendo la continuidad del tiempo, enlaza el pasado (bloque n) con el futuro[18] (bloque n+1). Cuando se crea una transacción y se propaga por los nodos resulta indiferente el tiempo que, según la configuración del nodo, se asocie a la misma. Para Bitcoin, hasta que esa transacción no figure en un bloque minado, simplemente, no existe. Y cuando se mina el bloque que la contiene, es cuando se fija su tiempo en Bitcoin, y ese tiempo u hora no es otro que el número de bloque que la contiene, la unidad temporal propia de Bitcoin.
En resumen, las máquinas que albergan un nodo tienen su reloj interno que se puede configurar como el usuario quiera para determinar el tiempo del sistema. El nodo tiene su propio reloj, que lo ajusta al tiempo de la red Bitcoin para mantener el consenso, calculando la mediana[19] (no la media) del tiempo comunicado por los nodos a los que se conecta (dentro los límites indicados), generando así el “tiempo ajustado a la red” que usará el nodo para su actividad en la red de Bitcoin. Cuando se crea una transacción, el software correspondiente puede vincularla a un tiempo concreto (sea el que sea), pero eso es indiferente a la red Bitcoin. Cuando esa transacción se propaga a los diferentes nodos, estos pueden, igualmente, asociarla a algún tipo de tiempo, pero eso es igualmente indiferente. La transacción se incluye en un proyecto de bloque y ahí ya va sin tiempo alguno. Cuando se mina un bloque con esa transacción, el minero pone su sello de tiempo humano para las comprobaciones a las que antes hemos hecho referencia y, superadas éstas, el tiempo que trasciende es el del orden secuencial de los bloques, hasta tal punto que es perfectamente factible un bloque que tenga un sello de tiempo previo al del bloque anterior, algo que en los comienzos de Bitcoin acontecía con una relativa frecuencia, como muestra esta imagen donde se observa que los bloques 335.276 y 335.269 tienen un sello de tiempo inferior al bloque anterior en 7 y 2 segundos:
Y a veces la diferencia temporal no era de unos segundos sino hasta de minutos, como muestra el bloque 335.293:
Algún día alguien contará alguna historia que comience así: “acababa de minarse el bloque 1.000.000 cuando…”.
Artículo publicado en Internet, habiendo sido minado el bloque 785.665.
Notas:
- Fuentes: https://citas.in/frases/88717-jose-luis-sampedro-el-tiempo-no-es-oro-el-tiempo-es-vida/https://cetr.net/es/el_tiempo_no_es_oro_el_tiempo_es_vid/ ↑
- “Tiempo”. Juan Pablo Segundo Espínola. https://concepto.de/tiempo/ ↑
- https://dle.rae.es/tiempo ↑
- https://twitter.com/dergigi/status/1460562198653190154Ver también este capitulo del Libro “21 Lessons. What I’ve Learned from Falling Down the Bitcoin Rabbit Hole”: https://21lessons.com/17/ en que Gigi explica cómo se determina el tiempo en un sistema descentralizado, donde lo complicado es realmente esa fijación del tiempo.En Español: https://prometeabtc.com/wp-content/uploads/2023/03/PDF-21L-P.pdf ↑
- Disponible en: https://dergigi.com/2021/01/14/bitcoin-is-time/ y en español en: https://demartino.ar/bitcoin-es-tiempo/ ↑
- Gigi lo explica con el siguiente ejemplo: “Imagina que eres un pastor y quieres asegurarte de que todo tu rebaño regrese a casa. Puedes ponerle un collar a cada oveja, y tan pronto como una oveja regrese a casa, simplemente quitas el collar y lo cuelgas en tu cobertizo. Si tienes una percha para cada collar, sabrás que todas las ovejas regresaron a salvo tan pronto como se llenen todas las perchas. Por supuesto, también puedes contarlos y mantener una lista. Sin embargo, deberás asegurarte de crear una nueva lista cada vez que comiences a contar, y también deberás asegurarte de no contar una sola oveja dos veces (o no contar ninguna).” ↑
- https://dergigi.com/2021/01/14/bitcoin-is-time/ ↑
- Según indica fnietom: https://twitter.com/fnietom/status/1570385656630714369 ↑
- Medida que no figuraba en la concepción original de Satoshi y fue introducida con el BIP-113: https://github.com/bitcoin/bips/blob/master/bip-0113.mediawiki ↑
- Understanding the Bitcoin Blockchain Header. RJ Rybarczyk: https://medium.com/fcats-blockchain-incubator/understanding-the-bitcoin-blockchain-header-a2b0db06b515 ↑
- https://bitcointalk.org/index.php?topic=5180442.0 ↑
- Timejacking & Bitcoin http://culubas.blogspot.com/2011/05/timejacking-bitcoin_802.html ↑
- https://nfting.medium.com/timewhat-is-timejacking-5ab8f08ae82f ↑
- https://web.archive.org/web/20110530032313/http://forum.bitcoin.org/index.php?topic=10241.0 ↑
- La concepción el tiempo en Aristóteles. Jorge Vidal Arenas. https://www.scielo.cl/scielo.php?script=sci_arttext&pid=S0718-84712015000100014 ↑
- Para comprender el funcionamiento de la mempool, nada mejor que seguir a @dev7ba, creador de http://mempoolexplorer.com y escuchar sus participaciones en podcast como este de @lunaticoin: https://www.youtube.com/watch?v=w1Stg0H2-cE&t=1s ↑
- En términos aristotélicos sería un “accidente del tiempo”. https://eltamiz.com/elcedazo/2009/01/15/eso-que-llamamos-%22tiempo%22-%E2%80%93-segun-aristoteles/. Lucas Gabriel Cantarutti. Ver también artículo de nota 15. ↑
- Aristóteles: el ahora y la infinitud del tiempo.
https://encyclopaedia.herdereditorial.com/wiki/Recurso:Arist%C3%B3teles:_el_ahora_y_la_infinitud_del_tiempo ↑ - OjO, pues en numerosos artículos publicados en español, muchos de ellos malas traducciones del inglés, se habla de media en vez de mediana. ↑