mirror of
https://github.com/kvazar-network/kevacoin.git
synced 2025-01-12 16:17:53 +00:00
Keep conflictedTxs in ConnectTrace per-block
This commit is contained in:
parent
d3167ba9bb
commit
a1476877ce
@ -2179,17 +2179,17 @@ static int64_t nTimePostConnect = 0;
|
|||||||
* part of a single ActivateBestChainStep call.
|
* part of a single ActivateBestChainStep call.
|
||||||
*
|
*
|
||||||
* This class also tracks transactions that are removed from the mempool as
|
* This class also tracks transactions that are removed from the mempool as
|
||||||
* conflicts and can be used to pass all those transactions through
|
* conflicts (per block) and can be used to pass all those transactions
|
||||||
* SyncTransaction.
|
* through SyncTransaction.
|
||||||
*/
|
*/
|
||||||
class ConnectTrace {
|
class ConnectTrace {
|
||||||
private:
|
private:
|
||||||
std::vector<std::pair<CBlockIndex*, std::shared_ptr<const CBlock> > > blocksConnected;
|
std::vector<std::pair<CBlockIndex*, std::shared_ptr<const CBlock> > > blocksConnected;
|
||||||
std::vector<CTransactionRef> conflictedTxs;
|
std::vector<std::vector<CTransactionRef> > conflictedTxs;
|
||||||
CTxMemPool &pool;
|
CTxMemPool &pool;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ConnectTrace(CTxMemPool &_pool) : pool(_pool) {
|
ConnectTrace(CTxMemPool &_pool) : conflictedTxs(1), pool(_pool) {
|
||||||
pool.NotifyEntryRemoved.connect(boost::bind(&ConnectTrace::NotifyEntryRemoved, this, _1, _2));
|
pool.NotifyEntryRemoved.connect(boost::bind(&ConnectTrace::NotifyEntryRemoved, this, _1, _2));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2199,6 +2199,7 @@ public:
|
|||||||
|
|
||||||
void BlockConnected(CBlockIndex* pindex, std::shared_ptr<const CBlock> pblock) {
|
void BlockConnected(CBlockIndex* pindex, std::shared_ptr<const CBlock> pblock) {
|
||||||
blocksConnected.emplace_back(pindex, std::move(pblock));
|
blocksConnected.emplace_back(pindex, std::move(pblock));
|
||||||
|
conflictedTxs.emplace_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<std::pair<CBlockIndex*, std::shared_ptr<const CBlock> > >& GetBlocksConnected() {
|
std::vector<std::pair<CBlockIndex*, std::shared_ptr<const CBlock> > >& GetBlocksConnected() {
|
||||||
@ -2207,15 +2208,18 @@ public:
|
|||||||
|
|
||||||
void NotifyEntryRemoved(CTransactionRef txRemoved, MemPoolRemovalReason reason) {
|
void NotifyEntryRemoved(CTransactionRef txRemoved, MemPoolRemovalReason reason) {
|
||||||
if (reason == MemPoolRemovalReason::CONFLICT) {
|
if (reason == MemPoolRemovalReason::CONFLICT) {
|
||||||
conflictedTxs.push_back(txRemoved);
|
conflictedTxs.back().push_back(txRemoved);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void CallSyncTransactionOnConflictedTransactions() {
|
void CallSyncTransactionOnConflictedTransactions() {
|
||||||
for (const auto& tx : conflictedTxs) {
|
for (const auto& txRemovedForBlock : conflictedTxs) {
|
||||||
GetMainSignals().SyncTransaction(*tx, NULL, CMainSignals::SYNC_TRANSACTION_NOT_IN_BLOCK);
|
for (const auto& tx : txRemovedForBlock) {
|
||||||
|
GetMainSignals().SyncTransaction(*tx, NULL, CMainSignals::SYNC_TRANSACTION_NOT_IN_BLOCK);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
conflictedTxs.clear();
|
conflictedTxs.clear();
|
||||||
|
conflictedTxs.emplace_back();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user