¿Cuál es la diferencia entre time, blocktime y timereceived?

¿Cuál es exactamente la diferencia entre

time, blocktimeytimereceived

en la información de transacción devuelta por Bitcoind JSON RPC API? Por ejemplo:

{
    "amount": 0.02,
    "blockindex": 45,
    "time": 1306179671,
    "category": "receive",
    "confirmations": 109244,
    "timereceived": 1306179671,
    "address": "1P5xanGEdgPKYNt4BnATambHpbZ2h89bYv",
    "txid": "91eb6cb34b9253cce0ab5da171a0f5aae9d3d36208e23062ba61cd9e21c09a3d",
    "blockhash": "0000000000002e65f5cc554e99c352af958a63f4be663627f2c569e5a996a03a",
    "account": "",
    "blocktime": 1306173564
}

Respuestas (1)

timereceivedes cuando su cliente se enteró por primera vez de la transacción. Si envió la transacción, es el momento en que envió la transacción. Si recibió la transacción, es cuando su cliente vio por primera vez la transacción en la red.

timepuede ser diferente de timereceivedsi se enterara por primera vez de la transacción al verla en un bloque. Esto generalmente sucede cuando su cliente estuvo desconectado por un tiempo y se está viendo atrapado en la cadena de bloques. En este caso, timeutilizará la marca de tiempo del bloque si le parece razonable. Específicamente:

  • Si la marca de tiempo del bloque es en el futuro, timeserá la misma que timereceived.
  • Si la marca de tiempo del bloque es anterior a la última transacción en la billetera, timeserá igual a la hora de la última transacción en la billetera.
  • De lo contrario, se utilizará la marca de tiempo del bloque.

Los tiempos de transacción no cambian, incluso después de una reorganización, y las nuevas transacciones nunca tendrán un tiempo anterior a una transacción existente. Este no siempre fue el caso (las versiones anteriores preferían usar la marca de tiempo del bloque, que suele ser más precisa), pero el método actual facilita el manejo seguro de las marcas de tiempo de las transacciones.