Bitcoin Core
32.1.0
P2P Digital Currency
Toggle main menu visibility
Loading...
Searching...
No Matches
src
undo.h
Go to the documentation of this file.
1
// Copyright (c) 2009-2010 Satoshi Nakamoto
2
// Copyright (c) 2009-present 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
>
12
#include <
primitives/transaction.h
>
13
#include <
serialize.h
>
14
22
struct
TxInUndoFormatter
23
{
24
template
<
typename
Stream>
25
void
Ser
(Stream &s,
const
Coin
& txout) {
26
uint32_t nCode{(uint32_t{txout.
nHeight
} << 1) | uint32_t{txout.
fCoinBase
}};
27
::Serialize
(s,
VARINT
(nCode));
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
53
class
CTxUndo
54
{
55
public
:
56
// undo information for all txins
57
std::vector<Coin>
vprevout
;
58
59
SERIALIZE_METHODS
(
CTxUndo
, obj) {
READWRITE
(Using<
VectorFormatter<TxInUndoFormatter>
>(obj.vprevout)); }
60
};
61
63
class
CBlockUndo
64
{
65
public
:
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
CBlockUndo
Undo information for a CBlock.
Definition
undo.h:64
CBlockUndo::vtxundo
std::vector< CTxUndo > vtxundo
Definition
undo.h:66
CBlockUndo::SERIALIZE_METHODS
SERIALIZE_METHODS(CBlockUndo, obj)
Definition
undo.h:68
CTxUndo
Undo information for a CTransaction.
Definition
undo.h:54
CTxUndo::vprevout
std::vector< Coin > vprevout
Definition
undo.h:57
CTxUndo::SERIALIZE_METHODS
SERIALIZE_METHODS(CTxUndo, obj)
Definition
undo.h:59
Coin
A UTXO entry.
Definition
coins.h:46
Coin::out
CTxOut out
unspent transaction output
Definition
coins.h:49
Coin::fCoinBase
bool fCoinBase
whether containing transaction was a coinbase
Definition
coins.h:52
Coin::nHeight
uint32_t nHeight
at which height this containing transaction was included in the active block chain
Definition
coins.h:55
coins.h
compressor.h
consensus.h
transaction.h
serialize.h
Serialize
void Serialize(Stream &, V)=delete
VARINT
#define VARINT(obj)
Definition
serialize.h:494
Unserialize
void Unserialize(Stream &, V)=delete
READWRITE
#define READWRITE(...)
Definition
serialize.h:148
TxInUndoFormatter
Formatter for undo information for a CTxIn.
Definition
undo.h:23
TxInUndoFormatter::Unser
void Unser(Stream &s, Coin &txout)
Definition
undo.h:36
TxInUndoFormatter::Ser
void Ser(Stream &s, const Coin &txout)
Definition
undo.h:25
VectorFormatter
Formatter to serialize/deserialize vector elements using another formatter.
Definition
serialize.h:667
Generated on
for Bitcoin Core by
1.18.0