85 lines
2.4 KiB
C++
85 lines
2.4 KiB
C++
// Copyright (c) 2009-2010 Satoshi Nakamoto
|
|
// Distributed under the MIT/X11 software license, see the accompanying
|
|
// file license.txt or http://www.opensource.org/licenses/mit-license.php.
|
|
#ifndef BITCOIN_AUXPOW_H
|
|
#define BITCOIN_AUXPOW_H
|
|
|
|
#include "main.h"
|
|
|
|
class CAuxPow : public CMerkleTx
|
|
{
|
|
public:
|
|
CAuxPow(const CTransaction& txIn) : CMerkleTx(txIn)
|
|
{
|
|
}
|
|
|
|
CAuxPow() :CMerkleTx()
|
|
{
|
|
}
|
|
|
|
// Merkle branch with root vchAux
|
|
// root must be present inside the coinbase
|
|
std::vector<uint256> vChainMerkleBranch;
|
|
// Index of chain in chains merkle tree
|
|
unsigned int nChainIndex;
|
|
CBlockHeader parentBlockHeader;
|
|
|
|
IMPLEMENT_SERIALIZE
|
|
(
|
|
nSerSize += SerReadWrite(s, *(CMerkleTx*)this, nType, nVersion, ser_action);
|
|
nVersion = this->nVersion;
|
|
READWRITE(vChainMerkleBranch);
|
|
READWRITE(nChainIndex);
|
|
|
|
// Always serialize the saved parent block as header so that the size of CAuxPow
|
|
// is consistent.
|
|
nSerSize += SerReadWrite(s, parentBlockHeader, nType, nVersion, ser_action);
|
|
)
|
|
|
|
bool Check(uint256 hashAuxBlock, int nChainID);
|
|
|
|
uint256 GetParentBlockHash()
|
|
{
|
|
return parentBlockHeader.GetPoWHash();
|
|
}
|
|
};
|
|
|
|
template <typename Stream>
|
|
int ReadWriteAuxPow(Stream& s, const boost::shared_ptr<CAuxPow>& auxpow, int nType, int nVersion, CSerActionGetSerializeSize ser_action)
|
|
{
|
|
if (nVersion & BLOCK_VERSION_AUXPOW)
|
|
{
|
|
return ::GetSerializeSize(*auxpow, nType, nVersion);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
template <typename Stream>
|
|
int ReadWriteAuxPow(Stream& s, const boost::shared_ptr<CAuxPow>& auxpow, int nType, int nVersion, CSerActionSerialize ser_action)
|
|
{
|
|
if (nVersion & BLOCK_VERSION_AUXPOW)
|
|
{
|
|
return SerReadWrite(s, *auxpow, nType, nVersion, ser_action);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
template <typename Stream>
|
|
int ReadWriteAuxPow(Stream& s, boost::shared_ptr<CAuxPow>& auxpow, int nType, int nVersion, CSerActionUnserialize ser_action)
|
|
{
|
|
if (nVersion & BLOCK_VERSION_AUXPOW)
|
|
{
|
|
auxpow.reset(new CAuxPow());
|
|
return SerReadWrite(s, *auxpow, nType, nVersion, ser_action);
|
|
}
|
|
else
|
|
{
|
|
auxpow.reset();
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
extern void RemoveMergedMiningHeader(std::vector<unsigned char>& vchAux);
|
|
extern CScript MakeCoinbaseWithAux(unsigned int nBits, unsigned int nExtraNonce, std::vector<unsigned char>& vchAux);
|
|
#endif
|