diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp index aefd15284..dc085d0df 100644 --- a/src/wallet/wallet.cpp +++ b/src/wallet/wallet.cpp @@ -3454,6 +3454,27 @@ void CWallet::GetKeyBirthTimes(std::map &mapKeyBirth) c mapKeyBirth[it->first] = it->second->GetBlockTime() - 7200; // block times can be 2h off } +/** + * Compute smart timestamp for a transaction being added to the wallet. + * + * Logic: + * - If sending a transaction, assign its timestamp to the current time. + * - If receiving a transaction outside a block, assign its timestamp to the + * current time. + * - If receiving a block with a future timestamp, assign all its (not already + * known) transactions' timestamps to the current time. + * - If receiving a block with a past timestamp, before the most recent known + * transaction (that we care about), assign all its (not already known) + * transactions' timestamps to the same timestamp as that most-recent-known + * transaction. + * - If receiving a block with a past timestamp, but after the most recent known + * transaction, assign all its (not already known) transactions' timestamps to + * the block time. + * + * For more information see CWalletTx::nTimeSmart, + * https://bitcointalk.org/?topic=54527, or + * https://github.com/bitcoin/bitcoin/pull/1393. + */ unsigned int CWallet::ComputeTimeSmart(const CWalletTx& wtx) const { unsigned int nTimeSmart = wtx.nTimeReceived; diff --git a/src/wallet/wallet.h b/src/wallet/wallet.h index 110dedcad..99f6f43a4 100644 --- a/src/wallet/wallet.h +++ b/src/wallet/wallet.h @@ -260,6 +260,15 @@ public: std::vector > vOrderForm; unsigned int fTimeReceivedIsTxTime; unsigned int nTimeReceived; //!< time received by this node + /** + * Stable timestamp that never changes, and reflects the order a transaction + * was added to the wallet. Timestamp is based on the block time for a + * transaction added as part of a block, or else the time when the + * transaction was received if it wasn't part of a block, with the timestamp + * adjusted in both cases so timestamp order matches the order transactions + * were added to the wallet. More details can be found in + * CWallet::ComputeTimeSmart(). + */ unsigned int nTimeSmart; /** * From me flag is set to 1 for transactions that were created by the wallet