Bitcoin Time Stamps
- decentralizedb
¿Una pregunta sencilla?
Una pregunta que en principio sonaba sencilla dio pie a este artículo. Y es que cuando empiezas a adentrarte en el mundo de Bitcoin (con mayúsculas) te vas dando cuenta que hay una gran variedad de tecnologías, actores y problemas y que en todas se ha ido trabajando para que la maquinaría funcione de manera impecable.
La pregunta en cuestión: “Alguien sabe por casualidad cual ha sido el bloque que mas ha tardado y cuanto ha sido?”, refiriéndose a Bitcoin.
Pregunta simple, sencilla y hubiera bastado con buscar en en Internet la información y seguro que abría encontrado la respuesta. Sin embargo me gusta obtener la información de mi nodo. Así que empece a buscar cómo poder hacerlo.
Para contestar el porqué, tenía que entender, cómo obtener esa información, ello me llevo a investigar sobre cómo se gestiona el time stamp o marcas de tiempo de los bloques en Bitcoin.
Por ello, aquí escribo una parte de lo que me encontré, digo una parte, porque si pongo todo se hace demasiado largo, ya que por ejemplo, tal vez muchos piensen que la altura de los bloques (el número del bloque), es algo que se guarda en el propio bloque, pero no es así y el motivo es el siguiente:
Supongamos que un bloque es minado y «sellado» por un minero, si el número del bloque estuviera grabado, en este caso hipotético con el número 755555, entonces si por algún motivo se detectará que ese bloque contiene transacciones invalidas y debe ser «sacado» de la cadena o blockchain, no podría ser reemplazado por otro bloque que permitiera tener el secuencial en los números de bloque, el bloque 755555 se perdería y la cadena iría del bloque 755554 al 755556
Debido a que esto puede llegar a pasar, los bloques no guardan el número de bloque, lo que hacen es enlazarse por hashses, el bloque tiene una referencia al hash anterior y con ello si existe una reorganización de la cadena saben como volverse a numerar. Esto da para un artículo que espero poder escribir en breve.
Pero bueno, la intención era comentar como por cada cosa que investigas en Bitcoin, vas encontrándote con más detalles y más.
Bitcoin Blockchain time stamp
Dentro de Bitcoin, el protocolo de consenso maneja 2 reglas que deben seguirse en cuanto a los time stamps que deben registrarse en las cabeceras de un bloque:
-
Si un nodo recibe un bloque cuyo time stamp sea mayor a 2 horas en el futuro, lo rechazará.
-
Si un nodo recibe un bloque cuyo time stamp NO es mayor a la media del time stamp de los 11 bloques anteriores, ese bloque será rechazado. Esto se conoce como MTP (Median-Time-Past).
Es decir, un minero puede no poner el time stamp exacto del momento en el que minó el bloque, pero debe atenerse a las reglas anteriores.
Estas reglas de consenso tienen como objetivo asegurar que la red y sus participantes, en este caso en particular, los mineros se comporten de manera honesta y no traten de manipular el time stamp de los bloques, debido a lo siguiente:
-
La dificultad de la red de Bitcoin se reajusta basándose en un calculo estadístico sobre el tiempo que toma minar un bloque, ese cálculo toma el time stamp de 2016 bloques. El resultado, es un número que mide los segundos transcurridos entre el time stamp del primer bloque y del último de esos 2016 bloques que se están comparando (en realidad la media se saca sobre 2015). El valor ideal esperado es de 1.209.600 segundos transcurridos. Es decir los 2016 bloques deberían demorarse unas 2 semanas en ser generados y eso se traduce a que cada 10 minutos un bloque debería ser generado.
-
Existe la posibilidad de realizar un ataque llamado time warp attack el cual consiste en que los mineros podrían modificar el time stamp de los bloques cambiando por ejemplo la hora en sus maquinas para así falsearla o creando algún tipo de software que lo haga.
La cuestión es que debido a las validaciones y promedios que se van sacando de todos los bloques, hacen que este ataque sea muy costoso, si a eso se le suman las 2 reglas mencionadas de consenso, aumentan la seguridad de la red para que sea casi imposible para los mineros tratar de realizar cualquier tipo de manipulación en las marcas de tiempo, ya que sería descubierto por los nodos validadores y se arriesgarían a perder sus ganancias.
Es fácil imaginar que si no se tuvieran estas reglas, los mineros podrían jugar con los time stamps para mantener siempre una dificultad baja que les permitiera ser más competitivos con sus equipos a la hora de minar.
No es objetivo de este artículo, profundizar más en este tema, pero si quieres más información te dejo este link de aquí.
Como comentaba al inicio del artículo, otra cosa interesante que volví a entender (se me había olvidado por completo) es que no basta con volcar los bloques de manera arbitraría a un archivo (o en mi caso a una base de datos), porque el número del bloque no esta grabado en el mismo bloque, tal vez muchos lo tengan claro, pero mucha gente con la que he hablado del tema piensa que el número del bloque está en el propio bloque, ya escribiré luego sobre el tema, pero no es así.
Sabiendo lo anterior, aquí unos datos curiosos que podríamos descubrir sobre el los bloques y el time stamp y así responder a la pregunta original.
Al momento de escribir este artículo estamos en el bloque 646452.
El tiempo de minado más elevado que se tiene registrado en la blockchain es de 463.160 segundos, algo así como 5 días, 8 horas, 39 minutos, 20 segundos. Ocurrió entre el bloques 0 (génesis) y el bloque uno.
El motivo por el cual paso ese tiempo entre el bloque cero y el uno, no esta claro del todo, o por lo menos no pude encontrar información fehaciente que lo indicara (otro de los motivos por los que tarde en responder la pregunta).
Lo que se presupone es que esos días, entre la creación del bloque 0 y el bloque 1, Satoshi estaba preparando el software para ser lanzado y debido a ello estuvo ajustando el software. Por lo que hasta que se minó bloque 1 pasó todo ese tiempo, de hecho, el día que se minó el bloque 1 es el mismo día en el que Satoshi libera y da a conocer la versión 0.1.0 de Bitcoin.
Aquí dejo una lista del top 10 bloques que más tiempo han tardado en minarse y un top 10 de los que menos han tardado en minarse.
Número de Bloque |
Segundos |
Días (dd:hh:mm:ss) |
1 |
463160 |
05:08:39:20 |
15324 |
90532 |
01:01:08:52 |
16564 |
90390 |
01:01:06:30 |
15 |
87157 |
01:00:12:37 |
16592 |
73782 |
00:20:29:42 |
20189 |
60203 |
00:16:43:23 |
19724 |
47127 |
00:13:05:27 |
21438 |
38219 |
00:10:36:59 |
19722 |
37536 |
00:10:25:36 |
28 |
30884 |
00:08:34:44 |
En cuanto a los bloques que menos tiempo han llevado en minarse, cabe recordar qué, como las marcas de tiempo de los bloques no se aplican con rigor por los motivos que ya hemos comentado antes, es posible que un bloque tenga un time stamp que en el tiempo sea anterior al bloque que le precede. Recordemos, esto puede ser en hasta 2 horas (7200 segundos) menor que el bloque que le precede, en cuyo caso la diferencia de tiempo es negativa (recordar las reglas de consenso que comentamos al inicio).
El menor tiempo de minado registrado en la blockchain principal es de -7125 segundos, que es de (menos) –1 hora 58 minutos 45 segundos y ocurrió entre el bloque 156113 y el bloque 156114.
Han existido 14.183 bloques minados con un time stamp en negativo al momento de escribir este artículo.
Estos son los 10 bloques “más rápidos!”:
Número de Bloque |
Segundos |
Días (dd:hh:mm:ss) |
156114 |
-7125 |
-00:01:58:45 |
32650 |
-7115 |
-00:01:58:35 |
76595 |
-7019 |
-00:01:56:59 |
70719 |
-7017 |
-00:01:56:57 |
69516 |
-6997 |
-00:01:56:37 |
70666 |
-6961 |
-00:01:56:01 |
154186 |
-6603 |
-00:01:50:03 |
87108 |
-6391 |
-00:01:46:31 |
259731 |
-6201 |
-00:01:43:21 |
105910 |
-6088 |
-00:01:41:28 |
Muchas gracias a El mago del grupo de Telegram, con el que he tenido interesantes conversaciones y nos hemos ayudado mutuamente a investigar más de esta apasionante tecnología y de paso te invito a pasarte por su sitio, tiene información interesante y educativa sobre Bitcoin.
También quiero agradecer a @Lunaticoin uno de los administradores del grupo que me animo a responder la pregunta, si que ha dado de sí!!!!.
Si te ha resultado interesante esta información o deseas comentar algo por favor no dejes de comentarlo.
Te agradezco el tiempo que te has tomado en leerme y como siempre digo, #estudiabtc!!
Puedes dejar una propina con el botón «Invítame un café».
O mediante Lightning network:
También puedes hacerlo onchain, vía Paynyms de Samourai Wallet:
PayNym: +decentralized