Skip to content

Commit

Permalink
Introduce Coin, a single unspent output
Browse files Browse the repository at this point in the history
  • Loading branch information
sipa committed May 26, 2017
1 parent 7d991b5 commit 422634e
Showing 1 changed file with 62 additions and 0 deletions.
62 changes: 62 additions & 0 deletions src/coins.h
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,68 @@
#include <boost/foreach.hpp>
#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
*
Expand Down

0 comments on commit 422634e

Please sign in to comment.