¿En qué formato se almacena la hora de una transacción de Bitcoin?

Esta puede ser una pregunta muy simple de responder, pero no he podido encontrarla rápidamente. De todos modos, si tuviera que deconstruir una transacción en la cadena de bloques y extraer el valor de tiempo de la transacción, ¿en qué formato está la marca de tiempo?

En otras palabras, si sacara el valor del tiempo de extracción, ¿cómo puedo convertirlo en un valor significativo?

¿Es necesario conocer el tiempo de inmediato o solo los datos históricos (es decir, sin incluir las transacciones de los seis bloques más recientes)? Además, qué granularidad. ¿Conocer la marca de tiempo del bloque resuelve el problema o necesita tiempo real a medida que llegan? De cualquier manera, estos valores no son inmutables, ¿es un requisito?
Bueno, lo que me gustaría hacer es monitorear la diferencia de tiempo entre las transacciones recibidas para una dirección específica. En otras palabras, me gustaría ver con qué frecuencia se envían las transacciones a una dirección específica. Los datos deben ser específicos de la red, no necesariamente la hora en que el usuario publicó el pago en su cliente.

Respuestas (3)

Hay varias cosas que podrías querer decir con el momento de la transacción:

  1. Cuando se crea la transacción
  2. Cuando la transacción es conocida por el 90% de la red
  3. Cuando la transacción se incluye por primera vez en un bloque
  4. Cuando el bloque es conocido por el 90% de la red

No podemos saber 1, porque podría haberse generado sin conexión y no hay un campo de tiempo. Puede suponer que 1 está aproximadamente 30 segundos antes de 2, pero nuevamente, no puede saberlo.

Podemos averiguar 2, porque el momento en que recibimos la transacción será más o menos el mismo que cuando lo hace el 90% de la red. Para datos históricos, blockchain.info tiene una API.

Podemos averiguar 3, porque hay un campo de tiempo en el bloque. Sin embargo, eso puede fallar hasta una hora y a la red no le importará. Aún así, no hay muchas razones para mentir al respecto.

Calcular 4 es más o menos lo mismo que 2.

Con respecto al punto 2 y el punto 4, blockchain.info no registra la hora en que recibieron la transmisión, ¿verdad? (lo que significa que solo registran la marca de tiempo de la transacción creada, que puede estar desfasada por horas)
@Pacerier No estoy seguro de lo que quieres decir. Acabo de decir que las transacciones no tienen una marca de tiempo.

Si se refiere literalmente a la propiedad "tiempo" o "tiempo de bloque" de una transacción dentro de la cadena de bloques, entonces esta marca de tiempo está en formato Unix.

Y si por "convertirlo a un valor significativo", se refiere a un formato legible por humanos, puede usar una línea de comando de Unix (por ejemplo, Terminal en OSX) para hacer una conversión rápida:

Linux:

$ date -d @1395103695

Mac OS X:

$ date -j -f "%s" 1395103695

...que devolvería lo siguiente:

Mon Mar 17 14:48:15 HST 2014
Pero esa marca de tiempo que está desfasada por horas no es realmente útil , ¿verdad?
Esa no es realmente la pregunta de OP, es decir, en qué formato está la marca de tiempo dentro de una transacción en la cadena de bloques. Edité mi respuesta porque infiero que lo que quiso decir con "significativo" es "legible por humanos". La utilidad de estos datos es subjetiva.

Las transacciones no tienen un tiempo per se. Tienen un lock_time que actualmente no se usa de todos modos.

Los bloques tienen marcas de tiempo, bytes 69-72 después de recortar los encabezados del protocolo y las sumas de verificación. Algunos pueden decir que el tiempo de una transacción es el tiempo del bloque que lo incluyó.

Otra interpretación (la utilizada por blockchain.info) es simplemente la primera vez que el par recibió la transacción.

Creo que eso funcionaría. En realidad, tengo una idea para un proyecto, pero necesito saber la hora en que apareció una transacción en la cadena (o fue recibida por un par, como sugiere). ¿La marca de tiempo en el par no es confiable?
Si necesita algo inmutable, ni siquiera la marca de tiempo para el bloque es útil porque una reorganización de bloque aún puede ocurrir incluso una vez que una transacción está en un bloque.
@StephenGornick, Eso es confuso, ¿te importaría explicarlo? ¿Quiere decir que la marca de tiempo actual para el bloque 200k api.blockcypher.com/v1/btc/main/blocks/200000 que es 2012-09-22T10:45:59Z se puede modificar en el futuro?
Solo si se crea una bifurcación debajo del bloque 200k y supera la cadena actual. La marca de tiempo en el bloque es inmutable, pero la transacción puede aparecer en otro bloque con una marca de tiempo diferente.
@cdecker ¿Es un proceso arbitrario en el que las transacciones de bloque terminan después de una reorganización, o esperaría que fuera un bloque creado aproximadamente antes o después del bloque original?
Las bifurcaciones de bloques naturales no tienen ninguna coordinación, por lo que se espera que cada minero elija lo que se adapte a su política. Entonces, durante una reorganización, este tipo de asignación de tiempo puede terminar con nuevas marcas de tiempo arbitrarias.