@@ -1449,10 +1449,10 @@ void static ProcessGetBlockData(CNode* pfrom, const CChainParams& chainparams, c
1449
1449
bool sendMerkleBlock = false ;
1450
1450
CMerkleBlock merkleBlock;
1451
1451
{
1452
- LOCK (pfrom->m_tx_relay . cs_filter );
1453
- if (pfrom->m_tx_relay . pfilter ) {
1452
+ LOCK (pfrom->m_tx_relay -> cs_filter );
1453
+ if (pfrom->m_tx_relay -> pfilter ) {
1454
1454
sendMerkleBlock = true ;
1455
- merkleBlock = CMerkleBlock (*pblock, *pfrom->m_tx_relay . pfilter );
1455
+ merkleBlock = CMerkleBlock (*pblock, *pfrom->m_tx_relay -> pfilter );
1456
1456
}
1457
1457
}
1458
1458
if (sendMerkleBlock) {
@@ -1532,11 +1532,11 @@ void static ProcessGetData(CNode* pfrom, const CChainParams& chainparams, CConnm
1532
1532
if (mi != mapRelay.end ()) {
1533
1533
connman->PushMessage (pfrom, msgMaker.Make (nSendFlags, NetMsgType::TX, *mi->second ));
1534
1534
push = true ;
1535
- } else if (pfrom->m_tx_relay . timeLastMempoolReq ) {
1535
+ } else if (pfrom->m_tx_relay -> timeLastMempoolReq ) {
1536
1536
auto txinfo = mempool.info (inv.hash );
1537
1537
// To protect privacy, do not answer getdata using the mempool when
1538
1538
// that TX couldn't have been INVed in reply to a MEMPOOL request.
1539
- if (txinfo.tx && txinfo.nTime <= pfrom->m_tx_relay . timeLastMempoolReq ) {
1539
+ if (txinfo.tx && txinfo.nTime <= pfrom->m_tx_relay -> timeLastMempoolReq ) {
1540
1540
connman->PushMessage (pfrom, msgMaker.Make (nSendFlags, NetMsgType::TX, *txinfo.tx ));
1541
1541
push = true ;
1542
1542
}
@@ -1996,8 +1996,8 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
1996
1996
pfrom->m_limited_node = (!(nServices & NODE_NETWORK) && (nServices & NODE_NETWORK_LIMITED));
1997
1997
1998
1998
{
1999
- LOCK (pfrom->m_tx_relay . cs_filter );
2000
- pfrom->m_tx_relay . fRelayTxes = fRelay ; // set to true after we get the first filter* message
1999
+ LOCK (pfrom->m_tx_relay -> cs_filter );
2000
+ pfrom->m_tx_relay -> fRelayTxes = fRelay ; // set to true after we get the first filter* message
2001
2001
}
2002
2002
2003
2003
// Change version
@@ -3030,8 +3030,8 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
3030
3030
return true ;
3031
3031
}
3032
3032
3033
- LOCK (pfrom->m_tx_relay . cs_tx_inventory );
3034
- pfrom->m_tx_relay . fSendMempool = true ;
3033
+ LOCK (pfrom->m_tx_relay -> cs_tx_inventory );
3034
+ pfrom->m_tx_relay -> fSendMempool = true ;
3035
3035
return true ;
3036
3036
}
3037
3037
@@ -3124,10 +3124,10 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
3124
3124
}
3125
3125
else
3126
3126
{
3127
- LOCK (pfrom->m_tx_relay . cs_filter );
3128
- pfrom->m_tx_relay . pfilter .reset (new CBloomFilter (filter));
3129
- pfrom->m_tx_relay . pfilter ->UpdateEmptyFull ();
3130
- pfrom->m_tx_relay . fRelayTxes = true ;
3127
+ LOCK (pfrom->m_tx_relay -> cs_filter );
3128
+ pfrom->m_tx_relay -> pfilter .reset (new CBloomFilter (filter));
3129
+ pfrom->m_tx_relay -> pfilter ->UpdateEmptyFull ();
3130
+ pfrom->m_tx_relay -> fRelayTxes = true ;
3131
3131
}
3132
3132
return true ;
3133
3133
}
@@ -3142,9 +3142,9 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
3142
3142
if (vData.size () > MAX_SCRIPT_ELEMENT_SIZE) {
3143
3143
bad = true ;
3144
3144
} else {
3145
- LOCK (pfrom->m_tx_relay . cs_filter );
3146
- if (pfrom->m_tx_relay . pfilter ) {
3147
- pfrom->m_tx_relay . pfilter ->insert (vData);
3145
+ LOCK (pfrom->m_tx_relay -> cs_filter );
3146
+ if (pfrom->m_tx_relay -> pfilter ) {
3147
+ pfrom->m_tx_relay -> pfilter ->insert (vData);
3148
3148
} else {
3149
3149
bad = true ;
3150
3150
}
@@ -3157,11 +3157,11 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
3157
3157
}
3158
3158
3159
3159
if (strCommand == NetMsgType::FILTERCLEAR) {
3160
- LOCK (pfrom->m_tx_relay . cs_filter );
3160
+ LOCK (pfrom->m_tx_relay -> cs_filter );
3161
3161
if (pfrom->GetLocalServices () & NODE_BLOOM) {
3162
- pfrom->m_tx_relay . pfilter .reset (new CBloomFilter ());
3162
+ pfrom->m_tx_relay -> pfilter .reset (new CBloomFilter ());
3163
3163
}
3164
- pfrom->m_tx_relay . fRelayTxes = true ;
3164
+ pfrom->m_tx_relay -> fRelayTxes = true ;
3165
3165
return true ;
3166
3166
}
3167
3167
@@ -3170,8 +3170,8 @@ bool static ProcessMessage(CNode* pfrom, const std::string& strCommand, CDataStr
3170
3170
vRecv >> newFeeFilter;
3171
3171
if (MoneyRange (newFeeFilter)) {
3172
3172
{
3173
- LOCK (pfrom->m_tx_relay . cs_feeFilter );
3174
- pfrom->m_tx_relay . minFeeFilter = newFeeFilter;
3173
+ LOCK (pfrom->m_tx_relay -> cs_feeFilter );
3174
+ pfrom->m_tx_relay -> minFeeFilter = newFeeFilter;
3175
3175
}
3176
3176
LogPrint (BCLog::NET, " received: feefilter of %s from peer=%d\n " , CFeeRate (newFeeFilter).ToString (), pfrom->GetId ());
3177
3177
}
@@ -3791,70 +3791,70 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
3791
3791
}
3792
3792
pto->vInventoryBlockToSend .clear ();
3793
3793
3794
- LOCK (pto->m_tx_relay . cs_tx_inventory );
3794
+ LOCK (pto->m_tx_relay -> cs_tx_inventory );
3795
3795
// Check whether periodic sends should happen
3796
3796
bool fSendTrickle = pto->HasPermission (PF_NOBAN);
3797
- if (pto->m_tx_relay . nNextInvSend < nNow) {
3797
+ if (pto->m_tx_relay -> nNextInvSend < nNow) {
3798
3798
fSendTrickle = true ;
3799
3799
if (pto->fInbound ) {
3800
- pto->m_tx_relay . nNextInvSend = connman->PoissonNextSendInbound (nNow, INVENTORY_BROADCAST_INTERVAL);
3800
+ pto->m_tx_relay -> nNextInvSend = connman->PoissonNextSendInbound (nNow, INVENTORY_BROADCAST_INTERVAL);
3801
3801
} else {
3802
3802
// Use half the delay for outbound peers, as there is less privacy concern for them.
3803
- pto->m_tx_relay . nNextInvSend = PoissonNextSend (nNow, INVENTORY_BROADCAST_INTERVAL >> 1 );
3803
+ pto->m_tx_relay -> nNextInvSend = PoissonNextSend (nNow, INVENTORY_BROADCAST_INTERVAL >> 1 );
3804
3804
}
3805
3805
}
3806
3806
3807
3807
// Time to send but the peer has requested we not relay transactions.
3808
3808
if (fSendTrickle ) {
3809
- LOCK (pto->m_tx_relay . cs_filter );
3810
- if (!pto->m_tx_relay . fRelayTxes ) pto->m_tx_relay . setInventoryTxToSend .clear ();
3809
+ LOCK (pto->m_tx_relay -> cs_filter );
3810
+ if (!pto->m_tx_relay -> fRelayTxes ) pto->m_tx_relay -> setInventoryTxToSend .clear ();
3811
3811
}
3812
3812
3813
3813
// Respond to BIP35 mempool requests
3814
- if (fSendTrickle && pto->m_tx_relay . fSendMempool ) {
3814
+ if (fSendTrickle && pto->m_tx_relay -> fSendMempool ) {
3815
3815
auto vtxinfo = mempool.infoAll ();
3816
- pto->m_tx_relay . fSendMempool = false ;
3816
+ pto->m_tx_relay -> fSendMempool = false ;
3817
3817
CAmount filterrate = 0 ;
3818
3818
{
3819
- LOCK (pto->m_tx_relay . cs_feeFilter );
3820
- filterrate = pto->m_tx_relay . minFeeFilter ;
3819
+ LOCK (pto->m_tx_relay -> cs_feeFilter );
3820
+ filterrate = pto->m_tx_relay -> minFeeFilter ;
3821
3821
}
3822
3822
3823
- LOCK (pto->m_tx_relay . cs_filter );
3823
+ LOCK (pto->m_tx_relay -> cs_filter );
3824
3824
3825
3825
for (const auto & txinfo : vtxinfo) {
3826
3826
const uint256& hash = txinfo.tx ->GetHash ();
3827
3827
CInv inv (MSG_TX, hash);
3828
- pto->m_tx_relay . setInventoryTxToSend .erase (hash);
3828
+ pto->m_tx_relay -> setInventoryTxToSend .erase (hash);
3829
3829
if (filterrate) {
3830
3830
if (txinfo.feeRate .GetFeePerK () < filterrate)
3831
3831
continue ;
3832
3832
}
3833
- if (pto->m_tx_relay . pfilter ) {
3834
- if (!pto->m_tx_relay . pfilter ->IsRelevantAndUpdate (*txinfo.tx )) continue ;
3833
+ if (pto->m_tx_relay -> pfilter ) {
3834
+ if (!pto->m_tx_relay -> pfilter ->IsRelevantAndUpdate (*txinfo.tx )) continue ;
3835
3835
}
3836
- pto->m_tx_relay . filterInventoryKnown .insert (hash);
3836
+ pto->m_tx_relay -> filterInventoryKnown .insert (hash);
3837
3837
vInv.push_back (inv);
3838
3838
if (vInv.size () == MAX_INV_SZ) {
3839
3839
connman->PushMessage (pto, msgMaker.Make (NetMsgType::INV, vInv));
3840
3840
vInv.clear ();
3841
3841
}
3842
3842
}
3843
- pto->m_tx_relay . timeLastMempoolReq = GetTime ();
3843
+ pto->m_tx_relay -> timeLastMempoolReq = GetTime ();
3844
3844
}
3845
3845
3846
3846
// Determine transactions to relay
3847
3847
if (fSendTrickle ) {
3848
3848
// Produce a vector with all candidates for sending
3849
3849
std::vector<std::set<uint256>::iterator> vInvTx;
3850
- vInvTx.reserve (pto->m_tx_relay . setInventoryTxToSend .size ());
3851
- for (std::set<uint256>::iterator it = pto->m_tx_relay . setInventoryTxToSend .begin (); it != pto->m_tx_relay . setInventoryTxToSend .end (); it++) {
3850
+ vInvTx.reserve (pto->m_tx_relay -> setInventoryTxToSend .size ());
3851
+ for (std::set<uint256>::iterator it = pto->m_tx_relay -> setInventoryTxToSend .begin (); it != pto->m_tx_relay -> setInventoryTxToSend .end (); it++) {
3852
3852
vInvTx.push_back (it);
3853
3853
}
3854
3854
CAmount filterrate = 0 ;
3855
3855
{
3856
- LOCK (pto->m_tx_relay . cs_feeFilter );
3857
- filterrate = pto->m_tx_relay . minFeeFilter ;
3856
+ LOCK (pto->m_tx_relay -> cs_feeFilter );
3857
+ filterrate = pto->m_tx_relay -> minFeeFilter ;
3858
3858
}
3859
3859
// Topologically and fee-rate sort the inventory we send for privacy and priority reasons.
3860
3860
// A heap is used so that not all items need sorting if only a few are being sent.
@@ -3863,17 +3863,17 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
3863
3863
// No reason to drain out at many times the network's capacity,
3864
3864
// especially since we have many peers and some will draw much shorter delays.
3865
3865
unsigned int nRelayedTransactions = 0 ;
3866
- LOCK (pto->m_tx_relay . cs_filter );
3866
+ LOCK (pto->m_tx_relay -> cs_filter );
3867
3867
while (!vInvTx.empty () && nRelayedTransactions < INVENTORY_BROADCAST_MAX) {
3868
3868
// Fetch the top element from the heap
3869
3869
std::pop_heap (vInvTx.begin (), vInvTx.end (), compareInvMempoolOrder);
3870
3870
std::set<uint256>::iterator it = vInvTx.back ();
3871
3871
vInvTx.pop_back ();
3872
3872
uint256 hash = *it;
3873
3873
// Remove it from the to-be-sent set
3874
- pto->m_tx_relay . setInventoryTxToSend .erase (it);
3874
+ pto->m_tx_relay -> setInventoryTxToSend .erase (it);
3875
3875
// Check if not in the filter already
3876
- if (pto->m_tx_relay . filterInventoryKnown .contains (hash)) {
3876
+ if (pto->m_tx_relay -> filterInventoryKnown .contains (hash)) {
3877
3877
continue ;
3878
3878
}
3879
3879
// Not in the mempool anymore? don't bother sending it.
@@ -3884,7 +3884,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
3884
3884
if (filterrate && txinfo.feeRate .GetFeePerK () < filterrate) {
3885
3885
continue ;
3886
3886
}
3887
- if (pto->m_tx_relay . pfilter && !pto->m_tx_relay . pfilter ->IsRelevantAndUpdate (*txinfo.tx )) continue ;
3887
+ if (pto->m_tx_relay -> pfilter && !pto->m_tx_relay -> pfilter ->IsRelevantAndUpdate (*txinfo.tx )) continue ;
3888
3888
// Send
3889
3889
vInv.push_back (CInv (MSG_TX, hash));
3890
3890
nRelayedTransactions++;
@@ -3905,7 +3905,7 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
3905
3905
connman->PushMessage (pto, msgMaker.Make (NetMsgType::INV, vInv));
3906
3906
vInv.clear ();
3907
3907
}
3908
- pto->m_tx_relay . filterInventoryKnown .insert (hash);
3908
+ pto->m_tx_relay -> filterInventoryKnown .insert (hash);
3909
3909
}
3910
3910
}
3911
3911
}
@@ -4070,23 +4070,23 @@ bool PeerLogicValidation::SendMessages(CNode* pto)
4070
4070
!pto->HasPermission (PF_FORCERELAY)) {
4071
4071
CAmount currentFilter = mempool.GetMinFee (gArgs .GetArg (" -maxmempool" , DEFAULT_MAX_MEMPOOL_SIZE) * 1000000 ).GetFeePerK ();
4072
4072
int64_t timeNow = GetTimeMicros ();
4073
- if (timeNow > pto->m_tx_relay . nextSendTimeFeeFilter ) {
4073
+ if (timeNow > pto->m_tx_relay -> nextSendTimeFeeFilter ) {
4074
4074
static CFeeRate default_feerate (DEFAULT_MIN_RELAY_TX_FEE);
4075
4075
static FeeFilterRounder filterRounder (default_feerate);
4076
4076
CAmount filterToSend = filterRounder.round (currentFilter);
4077
4077
// We always have a fee filter of at least minRelayTxFee
4078
4078
filterToSend = std::max (filterToSend, ::minRelayTxFee.GetFeePerK ());
4079
- if (filterToSend != pto->m_tx_relay . lastSentFeeFilter ) {
4079
+ if (filterToSend != pto->m_tx_relay -> lastSentFeeFilter ) {
4080
4080
connman->PushMessage (pto, msgMaker.Make (NetMsgType::FEEFILTER, filterToSend));
4081
- pto->m_tx_relay . lastSentFeeFilter = filterToSend;
4081
+ pto->m_tx_relay -> lastSentFeeFilter = filterToSend;
4082
4082
}
4083
- pto->m_tx_relay . nextSendTimeFeeFilter = PoissonNextSend (timeNow, AVG_FEEFILTER_BROADCAST_INTERVAL);
4083
+ pto->m_tx_relay -> nextSendTimeFeeFilter = PoissonNextSend (timeNow, AVG_FEEFILTER_BROADCAST_INTERVAL);
4084
4084
}
4085
4085
// If the fee filter has changed substantially and it's still more than MAX_FEEFILTER_CHANGE_DELAY
4086
4086
// until scheduled broadcast, then move the broadcast to within MAX_FEEFILTER_CHANGE_DELAY.
4087
- else if (timeNow + MAX_FEEFILTER_CHANGE_DELAY * 1000000 < pto->m_tx_relay . nextSendTimeFeeFilter &&
4088
- (currentFilter < 3 * pto->m_tx_relay . lastSentFeeFilter / 4 || currentFilter > 4 * pto->m_tx_relay . lastSentFeeFilter / 3 )) {
4089
- pto->m_tx_relay . nextSendTimeFeeFilter = timeNow + GetRandInt (MAX_FEEFILTER_CHANGE_DELAY) * 1000000 ;
4087
+ else if (timeNow + MAX_FEEFILTER_CHANGE_DELAY * 1000000 < pto->m_tx_relay -> nextSendTimeFeeFilter &&
4088
+ (currentFilter < 3 * pto->m_tx_relay -> lastSentFeeFilter / 4 || currentFilter > 4 * pto->m_tx_relay -> lastSentFeeFilter / 3 )) {
4089
+ pto->m_tx_relay -> nextSendTimeFeeFilter = timeNow + GetRandInt (MAX_FEEFILTER_CHANGE_DELAY) * 1000000 ;
4090
4090
}
4091
4091
}
4092
4092
}
0 commit comments