mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-09 10:43:19 -05:00
Introduce Coin, a single unspent output
This commit is contained in:
parent
7d991b55db
commit
422634e2f5
1 changed files with 62 additions and 0 deletions
62
src/coins.h
62
src/coins.h
|
@ -20,6 +20,68 @@
|
||||||
#include <boost/foreach.hpp>
|
#include <boost/foreach.hpp>
|
||||||
#include <unordered_map>
|
#include <unordered_map>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A UTXO entry.
|
||||||
|
*
|
||||||
|
* Serialized format:
|
||||||
|
* - VARINT((coinbase ? 1 : 0) | (height << 1))
|
||||||
|
* - the non-spent CTxOut (via CTxOutCompressor)
|
||||||
|
*/
|
||||||
|
class Coin
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
//! whether the containing transaction was a coinbase
|
||||||
|
bool fCoinBase;
|
||||||
|
|
||||||
|
//! unspent transaction output
|
||||||
|
CTxOut out;
|
||||||
|
|
||||||
|
//! at which height the containing transaction was included in the active block chain
|
||||||
|
uint32_t nHeight;
|
||||||
|
|
||||||
|
//! construct a Coin from a CTxOut and height/coinbase properties.
|
||||||
|
Coin(CTxOut&& outIn, int nHeightIn, bool fCoinBaseIn) : fCoinBase(fCoinBaseIn), out(std::move(outIn)), nHeight(nHeightIn) {}
|
||||||
|
Coin(const CTxOut& outIn, int nHeightIn, bool fCoinBaseIn) : fCoinBase(fCoinBaseIn), out(outIn), nHeight(nHeightIn) {}
|
||||||
|
|
||||||
|
void Clear() {
|
||||||
|
out.SetNull();
|
||||||
|
fCoinBase = false;
|
||||||
|
nHeight = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
//! empty constructor
|
||||||
|
Coin() : fCoinBase(false), nHeight(0) { }
|
||||||
|
|
||||||
|
bool IsCoinBase() const {
|
||||||
|
return fCoinBase;
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Stream>
|
||||||
|
void Serialize(Stream &s) const {
|
||||||
|
assert(!IsPruned());
|
||||||
|
uint32_t code = nHeight * 2 + fCoinBase;
|
||||||
|
::Serialize(s, VARINT(code));
|
||||||
|
::Serialize(s, CTxOutCompressor(REF(out)));
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename Stream>
|
||||||
|
void Unserialize(Stream &s) {
|
||||||
|
uint32_t code = 0;
|
||||||
|
::Unserialize(s, VARINT(code));
|
||||||
|
nHeight = code >> 1;
|
||||||
|
fCoinBase = code & 1;
|
||||||
|
::Unserialize(s, REF(CTxOutCompressor(out)));
|
||||||
|
}
|
||||||
|
|
||||||
|
bool IsPruned() const {
|
||||||
|
return out.IsNull();
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t DynamicMemoryUsage() const {
|
||||||
|
return memusage::DynamicUsage(out.scriptPubKey);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Pruned version of CTransaction: only retains metadata and unspent transaction outputs
|
* Pruned version of CTransaction: only retains metadata and unspent transaction outputs
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue