]> Git Repo - VerusCoin.git/blame - src/undo.h
test
[VerusCoin.git] / src / undo.h
CommitLineData
999a2ab4 1// Copyright (c) 2009-2010 Satoshi Nakamoto
f914f1a7 2// Copyright (c) 2009-2013 The Bitcoin Core developers
999a2ab4 3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
84738627
PJ
6#ifndef BITCOIN_UNDO_H
7#define BITCOIN_UNDO_H
999a2ab4 8
561e9e9d 9#include "compressor.h"
d2270111 10#include "primitives/transaction.h"
999a2ab4 11#include "serialize.h"
12
13/** Undo information for a CTxIn
14 *
15 * Contains the prevout's CTxOut being spent, and if this was the
16 * last output of the affected transaction, its metadata as well
17 * (coinbase or not, height, transaction version)
18 */
19class CTxInUndo
20{
21public:
22 CTxOut txout; // the txout data before being spent
23 bool fCoinBase; // if the outpoint was the last unspent: whether it belonged to a coinbase
24 unsigned int nHeight; // if the outpoint was the last unspent: its height
25 int nVersion; // if the outpoint was the last unspent: its version
26
27 CTxInUndo() : txout(), fCoinBase(false), nHeight(0), nVersion(0) {}
28 CTxInUndo(const CTxOut &txoutIn, bool fCoinBaseIn = false, unsigned int nHeightIn = 0, int nVersionIn = 0) : txout(txoutIn), fCoinBase(fCoinBaseIn), nHeight(nHeightIn), nVersion(nVersionIn) { }
29
30 unsigned int GetSerializeSize(int nType, int nVersion) const {
31 return ::GetSerializeSize(VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion) +
32 (nHeight > 0 ? ::GetSerializeSize(VARINT(this->nVersion), nType, nVersion) : 0) +
33 ::GetSerializeSize(CTxOutCompressor(REF(txout)), nType, nVersion);
34 }
35
36 template<typename Stream>
37 void Serialize(Stream &s, int nType, int nVersion) const {
38 ::Serialize(s, VARINT(nHeight*2+(fCoinBase ? 1 : 0)), nType, nVersion);
39 if (nHeight > 0)
40 ::Serialize(s, VARINT(this->nVersion), nType, nVersion);
41 ::Serialize(s, CTxOutCompressor(REF(txout)), nType, nVersion);
42 }
43
44 template<typename Stream>
45 void Unserialize(Stream &s, int nType, int nVersion) {
46 unsigned int nCode = 0;
47 ::Unserialize(s, VARINT(nCode), nType, nVersion);
48 nHeight = nCode / 2;
49 fCoinBase = nCode & 1;
50 if (nHeight > 0)
51 ::Unserialize(s, VARINT(this->nVersion), nType, nVersion);
52 ::Unserialize(s, REF(CTxOutCompressor(REF(txout))), nType, nVersion);
53 }
54};
55
56/** Undo information for a CTransaction */
57class CTxUndo
58{
59public:
60 // undo information for all txins
61 std::vector<CTxInUndo> vprevout;
62
63 ADD_SERIALIZE_METHODS;
64
65 template <typename Stream, typename Operation>
66 inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
67 READWRITE(vprevout);
68 }
69};
70
937ba572 71/** Undo information for a CBlock */
72class CBlockUndo
73{
74public:
75 std::vector<CTxUndo> vtxundo; // for all but the coinbase
a8ac403d 76 uint256 old_tree_root;
937ba572 77
78 ADD_SERIALIZE_METHODS;
79
80 template <typename Stream, typename Operation>
81 inline void SerializationOp(Stream& s, Operation ser_action, int nType, int nVersion) {
82 READWRITE(vtxundo);
a8ac403d 83 READWRITE(old_tree_root);
937ba572 84 }
85};
86
84738627 87#endif // BITCOIN_UNDO_H
This page took 0.150413 seconds and 4 git commands to generate.