aboutsummaryrefslogtreecommitdiff
path: root/src/coins.cpp
diff options
context:
space:
mode:
authorLuke Dashjr <[email protected]>2016-02-27 06:11:04 +0000
committerLuke Dashjr <[email protected]>2016-02-27 06:11:37 +0000
commite5daa2e2aef61f0b9441d19f0b67015f426c6056 (patch)
tree90a095dcd23c8a74cb605f55e224a902cba75a06 /src/coins.cpp
parentBugfix: gitian: Add curl to packages (now needed for depends) (diff)
parentMerge #7583: [doc] Fix typos (diff)
downloaddiscoin-e5daa2e2aef61f0b9441d19f0b67015f426c6056.tar.xz
discoin-e5daa2e2aef61f0b9441d19f0b67015f426c6056.zip
Merge branch 'master' into depends_curl
Diffstat (limited to 'src/coins.cpp')
-rw-r--r--src/coins.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/coins.cpp b/src/coins.cpp
index 122bf4e48..877fb8b26 100644
--- a/src/coins.cpp
+++ b/src/coins.cpp
@@ -1,4 +1,4 @@
-// Copyright (c) 2012-2014 The Bitcoin Core developers
+// Copyright (c) 2012-2015 The Bitcoin Core developers
// Distributed under the MIT software license, see the accompanying
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
@@ -117,11 +117,17 @@ CCoinsModifier CCoinsViewCache::ModifyCoins(const uint256 &txid) {
return CCoinsModifier(*this, ret.first, cachedCoinUsage);
}
-CCoinsModifier CCoinsViewCache::ModifyNewCoins(const uint256 &txid) {
+// ModifyNewCoins has to know whether the new outputs its creating are for a
+// coinbase or not. If they are for a coinbase, it can not mark them as fresh.
+// This is to ensure that the historical duplicate coinbases before BIP30 was
+// in effect will still be properly overwritten when spent.
+CCoinsModifier CCoinsViewCache::ModifyNewCoins(const uint256 &txid, bool coinbase) {
assert(!hasModifier);
std::pair<CCoinsMap::iterator, bool> ret = cacheCoins.insert(std::make_pair(txid, CCoinsCacheEntry()));
ret.first->second.coins.Clear();
- ret.first->second.flags = CCoinsCacheEntry::FRESH;
+ if (!coinbase) {
+ ret.first->second.flags = CCoinsCacheEntry::FRESH;
+ }
ret.first->second.flags |= CCoinsCacheEntry::DIRTY;
return CCoinsModifier(*this, ret.first, 0);
}