6#ifndef BITCOIN_NODE_MINER_H
7#define BITCOIN_NODE_MINER_H
20#include <boost/multi_index/identity.hpp>
21#include <boost/multi_index/indexed_by.hpp>
22#include <boost/multi_index/ordered_index.hpp>
23#include <boost/multi_index/tag.hpp>
24#include <boost/multi_index_container.hpp>
38class KernelNotifications;
104 if (a->GetCountWithAncestors() != b->GetCountWithAncestors()) {
105 return a->GetCountWithAncestors() < b->GetCountWithAncestors();
113 boost::multi_index::ordered_unique<
115 CompareCTxMemPoolIter
118 boost::multi_index::ordered_non_unique<
120 boost::multi_index::tag<ancestor_score>,
121 boost::multi_index::identity<CTxMemPoolModifiedEntry>,
122 CompareTxMemPoolEntryByAncestorFee
127typedef boost::multi_index_container<
132typedef indexed_modified_transaction_set::nth_index<0>::type::iterator
modtxiter;
133typedef indexed_modified_transaction_set::index<ancestor_score>::type::iterator
modtxscoreiter;
161 std::unordered_set<Txid, SaltedTxidHasher>
inBlock;
213 bool TestPackage(uint64_t packageSize, int64_t packageSigOpsCost)
const;
248 const std::unique_ptr<CBlockTemplate>& block_template,
int64_t CAmount
Amount in satoshis (Can be negative)
const CChainParams & Params()
Return the currently selected parameters.
The block chain is a tree shaped structure starting with the genesis block at the root,...
CChainParams defines various tweakable parameters of a given instance of the Bitcoin system.
Fee rate in satoshis per virtualbyte: CAmount / vB the feerate is represented internally as FeeFrac.
Serialized script, used inside transaction inputs and outputs.
The basic transaction that is broadcasted on the network and contained in blocks.
CTxMemPool stores valid-according-to-the-current-best-chain transactions that may be included in the ...
RecursiveMutex cs
This mutex needs to be locked when accessing mapTx or other members that are guarded by it.
std::set< txiter, CompareIteratorByHash > setEntries
indexed_transaction_set::nth_index< 0 >::type::const_iterator txiter
Chainstate stores and provides an API to update our local knowledge of the current best chain.
Provides an interface for creating and interacting with one or two chainstates: an IBD chainstate gen...
Generate a new block, without valid proof-of-work.
Chainstate & m_chainstate
void onlyUnconfirmed(CTxMemPool::setEntries &testSet)
Remove confirmed (inBlock) entries from given set.
void resetBlock()
Clear the block's state and prepare for assembling a new block.
bool TestPackage(uint64_t packageSize, int64_t packageSigOpsCost) const
Test if a new package would "fit" in the block.
const CTxMemPool *const m_mempool
bool TestPackageTransactions(const CTxMemPool::setEntries &package) const
Perform checks on each transaction in a package: locktime, premature-witness, serialized size (if nec...
void addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated) EXCLUSIVE_LOCKS_REQUIRED(!m_mempool -> cs)
Add transactions based on feerate including unconfirmed ancestors Increments nPackagesSelected / nDes...
const CChainParams & chainparams
void SortForBlock(const CTxMemPool::setEntries &package, std::vector< CTxMemPool::txiter > &sortedEntries)
Sort the package in an order that is valid to appear in a block.
uint64_t nBlockSigOpsCost
int64_t m_lock_time_cutoff
std::unordered_set< Txid, SaltedTxidHasher > inBlock
std::unique_ptr< CBlockTemplate > pblocktemplate
static std::optional< int64_t > m_last_block_num_txs
The number of transactions in the last assembled block (excluding coinbase transaction)
void AddToBlock(CTxMemPool::txiter iter)
Add a tx to the block.
BlockAssembler(Chainstate &chainstate, const CTxMemPool *mempool, const Options &options)
std::unique_ptr< CBlockTemplate > CreateNewBlock()
Construct a new block template.
static std::optional< int64_t > m_last_block_weight
The weight of the last assembled block (including reserved weight for block header,...
Transaction validation functions.
boost::multi_index_container< CTxMemPoolModifiedEntry, CTxMemPoolModifiedEntry_Indices > indexed_modified_transaction_set
indexed_modified_transaction_set::nth_index< 0 >::type::iterator modtxiter
void RegenerateCommitments(CBlock &block, ChainstateManager &chainman)
Update an old GenerateCoinbaseCommitment from CreateNewBlock after the block txs have changed.
int64_t GetMinimumTime(const CBlockIndex *pindexPrev, const int64_t difficulty_adjustment_interval)
Get the minimum time a miner should use in the next block.
int64_t UpdateTime(CBlockHeader *pblock, const Consensus::Params &consensusParams, const CBlockIndex *pindexPrev)
indexed_modified_transaction_set::index< ancestor_score >::type::iterator modtxscoreiter
util::Result< void > ApplyArgsManOptions(const ArgsManager &args, BlockManager::Options &opts)
static const bool DEFAULT_PRINT_MODIFIED_FEE
std::optional< BlockRef > WaitTipChanged(ChainstateManager &chainman, KernelNotifications &kernel_notifications, const uint256 ¤t_tip, MillisecondsDouble &timeout)
std::unique_ptr< CBlockTemplate > WaitAndCreateNewBlock(ChainstateManager &chainman, KernelNotifications &kernel_notifications, CTxMemPool *mempool, const std::unique_ptr< CBlockTemplate > &block_template, const BlockWaitOptions &options, const BlockAssembler::Options &assemble_options)
Return a new block template when fees rise to a certain threshold or after a new tip; return nullopt ...
void AddMerkleRootAndCoinbase(CBlock &block, CTransactionRef coinbase, uint32_t version, uint32_t timestamp, uint32_t nonce)
std::optional< BlockRef > GetTip(ChainstateManager &chainman)
is a home for public enum and struct type definitions that are used internally by node code,...
static constexpr unsigned int DEFAULT_BLOCK_MIN_TX_FEE
Default for -blockmintxfee, which sets the minimum feerate for a transaction in blocks created by min...
static constexpr unsigned int DEFAULT_BLOCK_MAX_WEIGHT
Default for -blockmaxweight, which controls the range of block weights the mining code will create.
std::shared_ptr< const CTransaction > CTransactionRef
Parameters that influence chain consensus.
Hash/height pair to help track and identify blocks.
std::vector< int64_t > vTxSigOpsCost
std::vector< FeeFrac > m_package_feerates
std::vector< CAmount > vTxFees
std::vector< unsigned char > vchCoinbaseCommitment
CAmount nModFeesWithAncestors
CAmount GetModFeesWithAncestors() const
CTxMemPoolModifiedEntry(CTxMemPool::txiter entry)
CAmount GetModifiedFee() const
const CTransaction & GetTx() const
uint64_t GetSizeWithAncestors() const
uint64_t nSizeWithAncestors
int64_t nSigOpCostWithAncestors
Comparator for CTxMemPool::txiter objects.
bool operator()(const CTxMemPool::txiter &a, const CTxMemPool::txiter &b) const
bool operator()(const CTxMemPool::txiter &a, const CTxMemPool::txiter &b) const
CTxMemPool::txiter result_type
result_type operator()(const CTxMemPoolModifiedEntry &entry) const
update_for_parent_inclusion(CTxMemPool::txiter it)
void operator()(CTxMemPoolModifiedEntry &e)
#define EXCLUSIVE_LOCKS_REQUIRED(...)
std::chrono::duration< double, std::chrono::milliseconds::period > MillisecondsDouble