Skip to content

Commit

Permalink
mining: drop unused -nFees and sigops from CBlockTemplate
Browse files Browse the repository at this point in the history
For the coinbase vTxFees used a dummy value of -nFees. This
value was never returned by the RPC or used in a test.

Similarly the fist vTxSigOpsCost entry was calculated from
the dummy coinbase transaction.

Drop both and add code comments to prevent confusion.
  • Loading branch information
Sjors committed Feb 21, 2025
1 parent 5b8fd7c commit 6d76487
Show file tree
Hide file tree
Showing 4 changed files with 8 additions and 6 deletions.
3 changes: 3 additions & 0 deletions src/interfaces/mining.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,12 @@ class BlockTemplate
virtual ~BlockTemplate() = default;

virtual CBlockHeader getBlockHeader() = 0;
// Block contains a dummy coinbase transaction that should not be used.
virtual CBlock getBlock() = 0;

// Fees per transaction, not including coinbase transaction.
virtual std::vector<CAmount> getTxFees() = 0;
// Sigop cost per transaction, not including coinbase transaction.
virtual std::vector<int64_t> getTxSigops() = 0;

virtual CTransactionRef getCoinbaseTx() = 0;
Expand Down
7 changes: 2 additions & 5 deletions src/node/miner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,9 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock()
pblocktemplate.reset(new CBlockTemplate());
CBlock* const pblock = &pblocktemplate->block; // pointer for convenience

// Add dummy coinbase tx as first transaction
// Add dummy coinbase tx as first transaction. It is skipped by the
// getblocktemplate RPC and mining interface consumers must not use it.
pblock->vtx.emplace_back();
pblocktemplate->vTxFees.push_back(-1); // updated at end
pblocktemplate->vTxSigOpsCost.push_back(-1); // updated at end

LOCK(::cs_main);
CBlockIndex* pindexPrev = m_chainstate.m_chain.Tip();
Expand Down Expand Up @@ -165,7 +164,6 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock()
coinbaseTx.vin[0].scriptSig = CScript() << nHeight << OP_0;
pblock->vtx[0] = MakeTransactionRef(std::move(coinbaseTx));
pblocktemplate->vchCoinbaseCommitment = m_chainstate.m_chainman.GenerateCoinbaseCommitment(*pblock, pindexPrev);
pblocktemplate->vTxFees[0] = -nFees;

LogPrintf("CreateNewBlock(): block weight: %u txs: %u fees: %ld sigops %d\n", GetBlockWeight(*pblock), nBlockTx, nFees, nBlockSigOpsCost);

Expand All @@ -174,7 +172,6 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock()
UpdateTime(pblock, chainparams.GetConsensus(), pindexPrev);
pblock->nBits = GetNextWorkRequired(pindexPrev, pblock, chainparams.GetConsensus());
pblock->nNonce = 0;
pblocktemplate->vTxSigOpsCost[0] = WITNESS_SCALE_FACTOR * GetLegacySigOpCount(*pblock->vtx[0]);

BlockValidationState state;
if (m_options.test_block_validity && !TestBlockValidity(state, chainparams, m_chainstate, *pblock, pindexPrev,
Expand Down
2 changes: 2 additions & 0 deletions src/node/miner.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ static const bool DEFAULT_PRINT_MODIFIED_FEE = false;
struct CBlockTemplate
{
CBlock block;
// Fees per transaction, not including coinbase transaction (unlike CBlock::vtx).
std::vector<CAmount> vTxFees;
// Sigops per transaction, not including coinbase transaction (unlike CBlock::vtx).
std::vector<int64_t> vTxSigOpsCost;
std::vector<unsigned char> vchCoinbaseCommitment;
/* A vector of package fee rates, ordered by the sequence in which
Expand Down
2 changes: 1 addition & 1 deletion src/rpc/mining.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -893,7 +893,7 @@ static RPCHelpMan getblocktemplate()
}
entry.pushKV("depends", std::move(deps));

int index_in_template = i - 1;
int index_in_template = i - 2;
entry.pushKV("fee", tx_fees.at(index_in_template));
int64_t nTxSigOps{tx_sigops.at(index_in_template)};
if (fPreSegWit) {
Expand Down

0 comments on commit 6d76487

Please sign in to comment.