diff options
author | Gavin Andresen <gavinandresen@gmail.com> | 2010-11-09 17:10:43 -0500 |
---|---|---|
committer | Gavin Andresen <gavinandresen@gmail.com> | 2010-11-09 17:10:43 -0500 |
commit | 695aa2d5a2468208fa276bb38698283b67592d76 (patch) | |
tree | aa93c7388eef3164b85dfe6b0d04e75924716d53 | |
parent | 5d4b0c9026a46b63a996fcd10bad3b6db6405f25 (diff) | |
parent | e2a186af10d81a0e27b2e7c34783711d65caeae7 (diff) |
Merge remote branch 'refs/remotes/svn/trunk' into svn
-rw-r--r-- | main.cpp | 14 | ||||
-rw-r--r-- | main.h | 22 |
2 files changed, 34 insertions, 2 deletions
@@ -3400,7 +3400,7 @@ int64 GetBalance() } -bool SelectCoins(int64 nTargetValue, set<CWalletTx*>& setCoinsRet) +bool SelectCoinsMinConf(int64 nTargetValue, int nConfMine, int nConfTheirs, set<CWalletTx*>& setCoinsRet) { setCoinsRet.clear(); @@ -3422,6 +3422,11 @@ bool SelectCoins(int64 nTargetValue, set<CWalletTx*>& setCoinsRet) { if (!pcoin->IsFinal() || pcoin->fSpent || !pcoin->IsConfirmed()) continue; + + int nDepth = pcoin->GetDepthInMainChain(); + if (nDepth < (pcoin->IsFromMe() ? nConfMine : nConfTheirs)) + continue; + int64 n = pcoin->GetCredit(); if (n <= 0) continue; @@ -3506,6 +3511,13 @@ bool SelectCoins(int64 nTargetValue, set<CWalletTx*>& setCoinsRet) return true; } +bool SelectCoins(int64 nTargetValue, set<CWalletTx*>& setCoinsRet) +{ + return (SelectCoinsMinConf(nTargetValue, 1, 6, setCoinsRet) || + SelectCoinsMinConf(nTargetValue, 1, 1, setCoinsRet) || + SelectCoinsMinConf(nTargetValue, 0, 1, setCoinsRet)); +} + @@ -487,6 +487,11 @@ public: return false; } + bool IsFromMe() const + { + return (GetDebit() > 0); + } + int64 GetDebit() const { int64 nDebit = 0; @@ -789,8 +794,23 @@ public: return nCreditCached; } + bool IsFromMe() const + { + return (GetDebit() > 0); + } + bool IsConfirmed() const { + // Quick answer in most cases + if (!IsFinal()) + return false; + if (GetDepthInMainChain() >= 1) + return true; + if (!IsFromMe()) // using wtx's cached debit + return false; + + // If no confirmations but it's from us, we can still + // consider it confirmed if all dependencies are confirmed map<uint256, const CMerkleTx*> mapPrev; vector<const CMerkleTx*> vWorkQueue; vWorkQueue.reserve(vtxPrev.size()+1); @@ -803,7 +823,7 @@ public: return false; if (ptx->GetDepthInMainChain() >= 1) return true; - if (ptx->GetDebit() <= 0) + if (!ptx->IsFromMe()) return false; if (mapPrev.empty()) |