diff --git a/src/net_processing.cpp b/src/net_processing.cpp --- a/src/net_processing.cpp +++ b/src/net_processing.cpp @@ -4645,10 +4645,10 @@ if (fSendTrickle && pto->m_tx_relay->fSendMempool) { auto vtxinfo = g_mempool.infoAll(); pto->m_tx_relay->fSendMempool = false; - Amount filterrate = Amount::zero(); + CFeeRate filterrate; { LOCK(pto->m_tx_relay->cs_feeFilter); - filterrate = pto->m_tx_relay->minFeeFilter; + filterrate = CFeeRate(pto->m_tx_relay->minFeeFilter); } LOCK(pto->m_tx_relay->cs_filter); @@ -4657,8 +4657,9 @@ const TxId &txid = txinfo.tx->GetId(); CInv inv(MSG_TX, txid); pto->m_tx_relay->setInventoryTxToSend.erase(txid); - if (filterrate != Amount::zero() && - txinfo.feeRate.GetFeePerK() < filterrate) { + // Don't send transactions that peers will not put into + // their mempool + if (txinfo.fee < filterrate.GetFee(txinfo.vsize)) { continue; } if (pto->m_tx_relay->pfilter && @@ -4688,10 +4689,10 @@ it != pto->m_tx_relay->setInventoryTxToSend.end(); it++) { vInvTx.push_back(it); } - Amount filterrate = Amount::zero(); + CFeeRate filterrate; { LOCK(pto->m_tx_relay->cs_feeFilter); - filterrate = pto->m_tx_relay->minFeeFilter; + filterrate = CFeeRate(pto->m_tx_relay->minFeeFilter); } // Topologically and fee-rate sort the inventory we send for // privacy and priority reasons. A heap is used so that not all @@ -4725,8 +4726,9 @@ if (!txinfo.tx) { continue; } - if (filterrate != Amount::zero() && - txinfo.feeRate.GetFeePerK() < filterrate) { + // Peer told you to not send transactions at that feerate? + // Don't bother sending it. + if (txinfo.fee < filterrate.GetFee(txinfo.vsize)) { continue; } if (pto->m_tx_relay->pfilter && diff --git a/src/txmempool.h b/src/txmempool.h --- a/src/txmempool.h +++ b/src/txmempool.h @@ -358,8 +358,11 @@ /** Time the transaction entered the mempool. */ std::chrono::seconds m_time; - /** Feerate of the transaction. */ - CFeeRate feeRate; + /** Fee of the transaction. */ + Amount fee; + + /** Virtual size of the transaction. */ + size_t vsize; /** The fee delta. */ Amount nFeeDelta; diff --git a/src/txmempool.cpp b/src/txmempool.cpp --- a/src/txmempool.cpp +++ b/src/txmempool.cpp @@ -896,9 +896,8 @@ static TxMempoolInfo GetInfo(CTxMemPool::indexed_transaction_set::const_iterator it) { - return TxMempoolInfo{it->GetSharedTx(), it->GetTime(), - CFeeRate(it->GetFee(), it->GetTxSize()), - it->GetModifiedFee() - it->GetFee()}; + return TxMempoolInfo{it->GetSharedTx(), it->GetTime(), it->GetFee(), + it->GetTxSize(), it->GetModifiedFee() - it->GetFee()}; } std::vector CTxMemPool::infoAll() const {