В чем разница между time, blocktime и timereceived?

В чем именно разница между

time, blocktimeиtimereceived

в информации о транзакции, возвращаемой Bitcoind JSON RPC API? Например:

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

Ответы (1)

timereceivedкогда ваш клиент впервые узнал о сделке. Если вы отправили транзакцию, это время, когда вы отправили транзакцию. Если вы получили транзакцию, значит, ваш клиент впервые увидел транзакцию в сети.

timeможет отличаться от timereceivedтого, если бы вы впервые узнали о транзакции, увидев ее в блоке. Обычно это происходит, когда ваш клиент какое-то время находился в автономном режиме, и вы попали в цепочку блоков. В этом случае timeбудет использоваться временная метка блока, если это кажется разумным. Конкретно:

  • Если временная метка блока находится в будущем, timeбудет такой же, как timereceived.
  • Если отметка времени блока предшествует последней транзакции в кошельке, timeона будет равна времени последней транзакции в кошельке.
  • В противном случае будет использоваться метка времени блока.

Время транзакций не меняется даже после реорганизации, и новые транзакции никогда не будут иметь более раннее время, чем существующая транзакция. Так было не всегда (старые версии предпочитали использовать временную метку блока, что обычно является более точным), но текущий метод упрощает безопасную работу с временными метками транзакций.