Skip to content

Commit

Permalink
feefilter: Compute the absolute fee rather than stored rate to match …
Browse files Browse the repository at this point in the history
…mempool acceptance logic
  • Loading branch information
instagibbs committed Oct 22, 2019
1 parent a043001 commit 1446378
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 11 deletions.
17 changes: 9 additions & 8 deletions src/net_processing.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -3578,10 +3578,10 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
if (fSendTrickle && pto->fSendMempool) {
auto vtxinfo = mempool.infoAll();
pto->fSendMempool = false;
CAmount filterrate = 0;
CFeeRate filterrate;
{
LOCK(pto->cs_feeFilter);
filterrate = pto->minFeeFilter;
filterrate = CFeeRate(pto->minFeeFilter);
}

LOCK(pto->cs_filter);
Expand All @@ -3590,9 +3590,9 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
const uint256& hash = txinfo.tx->GetHash();
CInv inv(MSG_TX, hash);
pto->setInventoryTxToSend.erase(hash);
if (filterrate) {
if (txinfo.feeRate.GetFeePerK() < filterrate)
continue;
// Don't send transactions that peers will not put into their mempool
if (txinfo.fee < filterrate.GetFee(txinfo.vsize)) {
continue;
}
if (pto->pfilter) {
if (!pto->pfilter->IsRelevantAndUpdate(*txinfo.tx)) continue;
Expand All @@ -3615,10 +3615,10 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
for (std::set<uint256>::iterator it = pto->setInventoryTxToSend.begin(); it != pto->setInventoryTxToSend.end(); it++) {
vInvTx.push_back(it);
}
CAmount filterrate = 0;
CFeeRate filterrate;
{
LOCK(pto->cs_feeFilter);
filterrate = pto->minFeeFilter;
filterrate = CFeeRate(pto->minFeeFilter);
}
// Topologically and fee-rate sort the inventory we send for privacy and priority reasons.
// A heap is used so that not all items need sorting if only a few are being sent.
Expand All @@ -3645,7 +3645,8 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
if (!txinfo.tx) {
continue;
}
if (filterrate && 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->pfilter && !pto->pfilter->IsRelevantAndUpdate(*txinfo.tx)) continue;
Expand Down
2 changes: 1 addition & 1 deletion src/txmempool.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -855,7 +855,7 @@ void CTxMemPool::queryHashes(std::vector<uint256>& vtxid)
}

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<TxMempoolInfo> CTxMemPool::infoAll() const
Expand Down
7 changes: 5 additions & 2 deletions src/txmempool.h
Original file line number Diff line number Diff line change
Expand Up @@ -338,8 +338,11 @@ struct TxMempoolInfo
/** Time the transaction entered the mempool. */
int64_t nTime;

/** Feerate of the transaction. */
CFeeRate feeRate;
/** Fee of the transaction. */
CAmount fee;

/** Virtual size of the transaction. */
size_t vsize;

/** The fee delta. */
int64_t nFeeDelta;
Expand Down

0 comments on commit 1446378

Please sign in to comment.