Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MOVEONLY: separate CTxUndo out of core
- Loading branch information
jtimon
committed
Oct 27, 2014
1 parent
4a3587d
commit 999a2ab
Showing
5 changed files
with
74 additions
and
60 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,71 @@ | ||
// Copyright (c) 2009-2010 Satoshi Nakamoto | ||
// Copyright (c) 2009-2013 The Bitcoin developers | ||
// Distributed under the MIT software license, see the accompanying | ||
// file COPYING or http://www.opensource.org/licenses/mit-license.php. | ||
|
||
#ifndef H_BITCOIN_TXUNDO | ||
#define H_BITCOIN_TXUNDO | ||
|
||
#include "core.h" // Only for CTxOutCompressor | ||
#include "core/transaction.h" | ||
#include "serialize.h" | ||
|
||
/** Undo information for a CTxIn | ||
* | ||
* Contains the prevout's CTxOut being spent, and if this was the | ||
* last output of the affected transaction, its metadata as well | ||
* (coinbase or not, height, transaction version) | ||
*/ | ||
class CTxInUndo | ||
{ | ||
public: | ||
CTxOut txout; // the txout data before being spent | ||
bool fCoinBase; // if the outpoint was the last unspent: whether it belonged to a coinbase | ||
unsigned int nHeight; // if the outpoint was the last unspent: its height | ||
int nVersion; // if the outpoint was the last unspent: its version | ||
|
||
CTxInUndo() : txout(), fCoinBase(false), nHeight(0), nVersion(0) {} | ||
CTxInUndo(const CTxOut &txoutIn, bool fCoinBaseIn = false, unsigned int nHeightIn = 0, int nVersionIn = 0) : txout(txoutIn), fCoinBase(fCoinBaseIn), nHeight(nHeightIn), nVersion(nVersionIn) { } | ||
|
||
unsigned int GetSerializeSize(int nType, int nVersion) const { | ||
return ::GetSerializeSize(VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion) + | ||
(nHeight > 0 ? ::GetSerializeSize(VARINT(this->nVersion), nType, nVersion) : 0) + | ||
::GetSerializeSize(CTxOutCompressor(REF(txout)), nType, nVersion); | ||
} | ||
|
||
template<typename Stream> | ||
void Serialize(Stream &s, int nType, int nVersion) const { | ||
::Serialize(s, VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion); | ||
if (nHeight > 0) | ||
::Serialize(s, VARINT(this->nVersion), nType, nVersion); | ||
::Serialize(s, CTxOutCompressor(REF(txout)), nType, nVersion); | ||
} | ||
|
||
template<typename Stream> | ||
void Unserialize(Stream &s, int nType, int nVersion) { | ||
unsigned int nCode = 0; | ||
::Unserialize(s, VARINT(nCode), nType, nVersion); | ||
nHeight = nCode / 2; | ||
fCoinBase = nCode & 1; | ||
if (nHeight > 0) | ||
::Unserialize(s, VARINT(this->nVersion), nType, nVersion); | ||
::Unserialize(s, REF(CTxOutCompressor(REF(txout))), nType, nVersion); | ||
} | ||
}; | ||
|
||
/** Undo information for a CTransaction */ | ||
class CTxUndo | ||
{ | ||
public: | ||
// undo information for all txins | ||
std::vector<CTxInUndo> vprevout; | ||
|
||
ADD_SERIALIZE_METHODS; | ||
|
||
template <typename Stream, typename Operation> | ||
inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) { | ||
READWRITE(vprevout); | ||
} | ||
}; | ||
|
||
#endif // H_BITCOIN_TXUNDO |