Changeset View
Changeset View
Standalone View
Standalone View
src/miner.h
Show First 20 Lines • Show All 179 Lines • ▼ Show 20 Lines | private: | ||||
/** Clear the block's state and prepare for assembling a new block */ | /** Clear the block's state and prepare for assembling a new block */ | ||||
void resetBlock(); | void resetBlock(); | ||||
/** Add a tx to the block */ | /** Add a tx to the block */ | ||||
void AddToBlock(CTxMemPool::txiter iter); | void AddToBlock(CTxMemPool::txiter iter); | ||||
// Methods for how to add transactions to a block. | // Methods for how to add transactions to a block. | ||||
/** Add transactions based on tx "priority" */ | /** Add transactions based on tx "priority" */ | ||||
void addPriorityTxs(); | void addPriorityTxs(); | ||||
/** Add transactions based on feerate including unconfirmed ancestors | /** | ||||
* Add transactions based on feerate including unconfirmed ancestors. | |||||
* Increments nPackagesSelected / nDescendantsUpdated with corresponding | * Increments nPackagesSelected / nDescendantsUpdated with corresponding | ||||
* statistics from the package selection (for logging statistics). */ | * statistics from the package selection (for logging statistics). | ||||
*/ | |||||
void addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated); | void addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated); | ||||
/** Enum for the results from TestForBlock */ | /** Enum for the results from TestForBlock */ | ||||
enum class TestForBlockResult : uint8_t { | enum class TestForBlockResult : uint8_t { | ||||
TXFits = 0, | TXFits = 0, | ||||
TXCantFit = 1, | TXCantFit = 1, | ||||
BlockFinished = 3, | BlockFinished = 3, | ||||
}; | }; | ||||
// helper function for addPriorityTxs | // helper function for addPriorityTxs | ||||
/** Test if tx will still "fit" in the block */ | /** Test if tx will still "fit" in the block */ | ||||
TestForBlockResult TestForBlock(CTxMemPool::txiter iter); | TestForBlockResult TestForBlock(CTxMemPool::txiter iter); | ||||
/** Test if tx still has unconfirmed parents not yet in block */ | /** Test if tx still has unconfirmed parents not yet in block */ | ||||
bool isStillDependent(CTxMemPool::txiter iter); | bool isStillDependent(CTxMemPool::txiter iter); | ||||
// helper functions for addPackageTxs() | // helper functions for addPackageTxs() | ||||
/** Remove confirmed (inBlock) entries from given set */ | /** Remove confirmed (inBlock) entries from given set */ | ||||
void onlyUnconfirmed(CTxMemPool::setEntries &testSet); | void onlyUnconfirmed(CTxMemPool::setEntries &testSet); | ||||
/** Test if a new package would "fit" in the block */ | /** Test if a new package would "fit" in the block */ | ||||
bool TestPackage(uint64_t packageSize, int64_t packageSigOpsCost) const; | bool TestPackage(uint64_t packageSize, int64_t packageSigOpsCost) const; | ||||
/** Perform checks on each transaction in a package: | /** | ||||
* locktime, serialized size (if necessary) | * Perform checks on each transaction in a package: | ||||
* These checks should always succeed, and they're here | * locktime, serialized size (if necessary). These checks should always | ||||
* only as an extra check in case of suboptimal node configuration */ | * succeed, and they're here only as an extra check in case of suboptimal | ||||
* node configuration. | |||||
*/ | |||||
bool TestPackageTransactions(const CTxMemPool::setEntries &package); | bool TestPackageTransactions(const CTxMemPool::setEntries &package); | ||||
/** Return true if given transaction from mapTx has already been evaluated, | /** | ||||
* or if the transaction's cached data in mapTx is incorrect. */ | * Return true if given transaction from mapTx has already been evaluated, | ||||
* or if the transaction's cached data in mapTx is incorrect. | |||||
*/ | |||||
bool SkipMapTxEntry(CTxMemPool::txiter it, | bool SkipMapTxEntry(CTxMemPool::txiter it, | ||||
indexed_modified_transaction_set &mapModifiedTx, | indexed_modified_transaction_set &mapModifiedTx, | ||||
CTxMemPool::setEntries &failedTx); | CTxMemPool::setEntries &failedTx); | ||||
/** Sort the package in an order that is valid to appear in a block */ | /** Sort the package in an order that is valid to appear in a block */ | ||||
void SortForBlock(const CTxMemPool::setEntries &package, | void SortForBlock(const CTxMemPool::setEntries &package, | ||||
CTxMemPool::txiter entry, | CTxMemPool::txiter entry, | ||||
std::vector<CTxMemPool::txiter> &sortedEntries); | std::vector<CTxMemPool::txiter> &sortedEntries); | ||||
/** Add descendants of given transactions to mapModifiedTx with ancestor | /** | ||||
* state updated assuming given transactions are inBlock. Returns number | * Add descendants of given transactions to mapModifiedTx with ancestor | ||||
* of updated descendants. */ | * state updated assuming given transactions are inBlock. Returns number of | ||||
* updated descendants. | |||||
*/ | |||||
int UpdatePackagesForAdded(const CTxMemPool::setEntries &alreadyAdded, | int UpdatePackagesForAdded(const CTxMemPool::setEntries &alreadyAdded, | ||||
indexed_modified_transaction_set &mapModifiedTx); | indexed_modified_transaction_set &mapModifiedTx); | ||||
}; | }; | ||||
/** Modify the extranonce in a block */ | /** Modify the extranonce in a block */ | ||||
void IncrementExtraNonce(const Config &config, CBlock *pblock, | void IncrementExtraNonce(const Config &config, CBlock *pblock, | ||||
const CBlockIndex *pindexPrev, | const CBlockIndex *pindexPrev, | ||||
unsigned int &nExtraNonce); | unsigned int &nExtraNonce); | ||||
int64_t UpdateTime(CBlockHeader *pblock, const Config &config, | int64_t UpdateTime(CBlockHeader *pblock, const Config &config, | ||||
const CBlockIndex *pindexPrev); | const CBlockIndex *pindexPrev); | ||||
#endif // BITCOIN_MINER_H | #endif // BITCOIN_MINER_H |