Bitcoin Core 22.99.0
P2P Digital Currency
undo.h
Go to the documentation of this file.
1// Copyright (c) 2009-2010 Satoshi Nakamoto
2// Copyright (c) 2009-2020 The Bitcoin Core developers
3// Distributed under the MIT software license, see the accompanying
4// file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6#ifndef BITCOIN_UNDO_H
7#define BITCOIN_UNDO_H
8
9#include <coins.h>
10#include <compressor.h>
11#include <consensus/consensus.h>
13#include <serialize.h>
14#include <version.h>
15
24{
25 template<typename Stream>
26 void Ser(Stream &s, const Coin& txout) {
27 ::Serialize(s, VARINT(txout.nHeight * uint32_t{2} + txout.fCoinBase ));
28 if (txout.nHeight > 0) {
29 // Required to maintain compatibility with older undo format.
30 ::Serialize(s, (unsigned char)0);
31 }
32 ::Serialize(s, Using<TxOutCompression>(txout.out));
33 }
34
35 template<typename Stream>
36 void Unser(Stream &s, Coin& txout) {
37 uint32_t nCode = 0;
38 ::Unserialize(s, VARINT(nCode));
39 txout.nHeight = nCode >> 1;
40 txout.fCoinBase = nCode & 1;
41 if (txout.nHeight > 0) {
42 // Old versions stored the version number for the last spend of
43 // a transaction's outputs. Non-final spends were indicated with
44 // height = 0.
45 unsigned int nVersionDummy;
46 ::Unserialize(s, VARINT(nVersionDummy));
47 }
48 ::Unserialize(s, Using<TxOutCompression>(txout.out));
49 }
50};
51
54{
55public:
56 // undo information for all txins
57 std::vector<Coin> vprevout;
58
60};
61
64{
65public:
66 std::vector<CTxUndo> vtxundo; // for all but the coinbase
67
68 SERIALIZE_METHODS(CBlockUndo, obj) { READWRITE(obj.vtxundo); }
69};
70
71#endif // BITCOIN_UNDO_H
Undo information for a CBlock.
Definition: undo.h:64
std::vector< CTxUndo > vtxundo
Definition: undo.h:66
SERIALIZE_METHODS(CBlockUndo, obj)
Definition: undo.h:68
Undo information for a CTransaction.
Definition: undo.h:54
std::vector< Coin > vprevout
Definition: undo.h:57
SERIALIZE_METHODS(CTxUndo, obj)
Definition: undo.h:59
A UTXO entry.
Definition: coins.h:31
CTxOut out
unspent transaction output
Definition: coins.h:34
uint32_t nHeight
at which height this containing transaction was included in the active block chain
Definition: coins.h:40
unsigned int fCoinBase
whether containing transaction was a coinbase
Definition: coins.h:37
#define VARINT(obj)
Definition: serialize.h:443
void Serialize(Stream &s, char a)
Definition: serialize.h:199
void Unserialize(Stream &s, char &a)
Definition: serialize.h:215
static Wrapper< Formatter, T & > Using(T &&t)
Cause serialization/deserialization of an object to be done using a specified formatter class.
Definition: serialize.h:440
#define READWRITE(...)
Definition: serialize.h:147
Formatter for undo information for a CTxIn.
Definition: undo.h:24
void Unser(Stream &s, Coin &txout)
Definition: undo.h:36
void Ser(Stream &s, const Coin &txout)
Definition: undo.h:26
Formatter to serialize/deserialize vector elements using another formatter.
Definition: serialize.h:566