|
|
|
@ -170,7 +170,9 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
@@ -170,7 +170,9 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
|
|
|
|
fIncludeWitness = IsWitnessEnabled(pindexPrev, chainparams.GetConsensus()) && fMineWitnessTx; |
|
|
|
|
|
|
|
|
|
addPriorityTxs(); |
|
|
|
|
addPackageTxs(); |
|
|
|
|
int nPackagesSelected = 0; |
|
|
|
|
int nDescendantsUpdated = 0; |
|
|
|
|
addPackageTxs(nPackagesSelected, nDescendantsUpdated); |
|
|
|
|
|
|
|
|
|
int64_t nTime1 = GetTimeMicros(); |
|
|
|
|
|
|
|
|
@ -206,7 +208,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
@@ -206,7 +208,7 @@ std::unique_ptr<CBlockTemplate> BlockAssembler::CreateNewBlock(const CScript& sc
|
|
|
|
|
} |
|
|
|
|
int64_t nTime2 = GetTimeMicros(); |
|
|
|
|
|
|
|
|
|
LogPrint("bench", "CreateNewBlock() packages: %.2fms, validity: %.2fms (total %.2fms)\n", 0.001 * (nTime1 - nTimeStart), 0.001 * (nTime2 - nTime1), 0.001 * (nTime2 - nTimeStart)); |
|
|
|
|
LogPrint("bench", "CreateNewBlock() packages: %.2fms (%d packages, %d updated descendants), validity: %.2fms (total %.2fms)\n", 0.001 * (nTime1 - nTimeStart), nPackagesSelected, nDescendantsUpdated, 0.001 * (nTime2 - nTime1), 0.001 * (nTime2 - nTimeStart)); |
|
|
|
|
|
|
|
|
|
return std::move(pblocktemplate); |
|
|
|
|
} |
|
|
|
@ -347,9 +349,10 @@ void BlockAssembler::AddToBlock(CTxMemPool::txiter iter)
@@ -347,9 +349,10 @@ void BlockAssembler::AddToBlock(CTxMemPool::txiter iter)
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, |
|
|
|
|
int BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alreadyAdded, |
|
|
|
|
indexed_modified_transaction_set &mapModifiedTx) |
|
|
|
|
{ |
|
|
|
|
int nDescendantsUpdated = 0; |
|
|
|
|
BOOST_FOREACH(const CTxMemPool::txiter it, alreadyAdded) { |
|
|
|
|
CTxMemPool::setEntries descendants; |
|
|
|
|
mempool.CalculateDescendants(it, descendants); |
|
|
|
@ -357,6 +360,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread
@@ -357,6 +360,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread
|
|
|
|
|
BOOST_FOREACH(CTxMemPool::txiter desc, descendants) { |
|
|
|
|
if (alreadyAdded.count(desc)) |
|
|
|
|
continue; |
|
|
|
|
++nDescendantsUpdated; |
|
|
|
|
modtxiter mit = mapModifiedTx.find(desc); |
|
|
|
|
if (mit == mapModifiedTx.end()) { |
|
|
|
|
CTxMemPoolModifiedEntry modEntry(desc); |
|
|
|
@ -369,6 +373,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread
@@ -369,6 +373,7 @@ void BlockAssembler::UpdatePackagesForAdded(const CTxMemPool::setEntries& alread
|
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
return nDescendantsUpdated; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Skip entries in mapTx that are already in a block or are present
|
|
|
|
@ -409,7 +414,7 @@ void BlockAssembler::SortForBlock(const CTxMemPool::setEntries& package, CTxMemP
@@ -409,7 +414,7 @@ void BlockAssembler::SortForBlock(const CTxMemPool::setEntries& package, CTxMemP
|
|
|
|
|
// Each time through the loop, we compare the best transaction in
|
|
|
|
|
// mapModifiedTxs with the next transaction in the mempool to decide what
|
|
|
|
|
// transaction package to work on next.
|
|
|
|
|
void BlockAssembler::addPackageTxs() |
|
|
|
|
void BlockAssembler::addPackageTxs(int &nPackagesSelected, int &nDescendantsUpdated) |
|
|
|
|
{ |
|
|
|
|
// mapModifiedTx will store sorted packages after they are modified
|
|
|
|
|
// because some of their txs are already in the block
|
|
|
|
@ -532,8 +537,10 @@ void BlockAssembler::addPackageTxs()
@@ -532,8 +537,10 @@ void BlockAssembler::addPackageTxs()
|
|
|
|
|
mapModifiedTx.erase(sortedEntries[i]); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
++nPackagesSelected; |
|
|
|
|
|
|
|
|
|
// Update transactions that depend on each of these
|
|
|
|
|
UpdatePackagesForAdded(ancestors, mapModifiedTx); |
|
|
|
|
nDescendantsUpdated += UpdatePackagesForAdded(ancestors, mapModifiedTx); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|