mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-10-10 11:33:46 +02:00
Refactor CreateNewBlock to be a method of the BlockAssembler class
This commit is contained in:
56
src/miner.h
56
src/miner.h
@@ -7,14 +7,17 @@
|
||||
#define BITCOIN_MINER_H
|
||||
|
||||
#include "primitives/block.h"
|
||||
#include "txmempool.h"
|
||||
|
||||
#include <stdint.h>
|
||||
#include <memory>
|
||||
|
||||
class CBlockIndex;
|
||||
class CChainParams;
|
||||
class CReserveKey;
|
||||
class CScript;
|
||||
class CWallet;
|
||||
|
||||
namespace Consensus { struct Params; };
|
||||
|
||||
static const bool DEFAULT_PRINTPRIORITY = false;
|
||||
@@ -27,7 +30,58 @@ struct CBlockTemplate
|
||||
};
|
||||
|
||||
/** Generate a new block, without valid proof-of-work */
|
||||
CBlockTemplate* CreateNewBlock(const CChainParams& chainparams, const CScript& scriptPubKeyIn);
|
||||
class BlockAssembler
|
||||
{
|
||||
private:
|
||||
// The constructed block template
|
||||
std::unique_ptr<CBlockTemplate> pblocktemplate;
|
||||
// A convenience pointer that always refers to the CBlock in pblocktemplate
|
||||
CBlock* pblock;
|
||||
|
||||
// Configuration parameters for the block size
|
||||
unsigned int nBlockMaxSize, nBlockMinSize;
|
||||
|
||||
// Information on the current status of the block
|
||||
uint64_t nBlockSize;
|
||||
uint64_t nBlockTx;
|
||||
unsigned int nBlockSigOps;
|
||||
CAmount nFees;
|
||||
CTxMemPool::setEntries inBlock;
|
||||
|
||||
// Chain context for the block
|
||||
int nHeight;
|
||||
int64_t nLockTimeCutoff;
|
||||
const CChainParams& chainparams;
|
||||
|
||||
// Variables used for addScoreTxs and addPriorityTxs
|
||||
int lastFewTxs;
|
||||
bool blockFinished;
|
||||
|
||||
public:
|
||||
BlockAssembler(const CChainParams& chainparams);
|
||||
/** Construct a new block template with coinbase to scriptPubKeyIn */
|
||||
CBlockTemplate* CreateNewBlock(const CScript& scriptPubKeyIn);
|
||||
|
||||
private:
|
||||
// utility functions
|
||||
/** Clear the block's state and prepare for assembling a new block */
|
||||
void resetBlock();
|
||||
/** Add a tx to the block */
|
||||
void AddToBlock(CTxMemPool::txiter iter);
|
||||
|
||||
// Methods for how to add transactions to a block.
|
||||
/** Add transactions based on modified feerate */
|
||||
void addScoreTxs();
|
||||
/** Add transactions based on tx "priority" */
|
||||
void addPriorityTxs();
|
||||
|
||||
// helper function for addScoreTxs and addPriorityTxs
|
||||
/** Test if tx will still "fit" in the block */
|
||||
bool TestForBlock(CTxMemPool::txiter iter);
|
||||
/** Test if tx still has unconfirmed parents not yet in block */
|
||||
bool isStillDependent(CTxMemPool::txiter iter);
|
||||
};
|
||||
|
||||
/** Modify the extranonce in a block */
|
||||
void IncrementExtraNonce(CBlock* pblock, const CBlockIndex* pindexPrev, unsigned int& nExtraNonce);
|
||||
int64_t UpdateTime(CBlockHeader* pblock, const Consensus::Params& consensusParams, const CBlockIndex* pindexPrev);
|
||||
|
Reference in New Issue
Block a user