mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-01-25 10:43:19 -03:00
net: Avoid SetTxRelay for feeler connections
This commit is contained in:
parent
ec92d23fb8
commit
fa24239a1c
3 changed files with 17 additions and 8 deletions
|
@ -489,10 +489,8 @@ public:
|
|||
/** Whether this peer provides all services that we want. Used for eviction decisions */
|
||||
std::atomic_bool m_has_all_wanted_services{false};
|
||||
|
||||
/** Whether we should relay transactions to this peer (their version
|
||||
* message did not include fRelay=false and this is not a block-relay-only
|
||||
* connection). This only changes from false to true. It will never change
|
||||
* back to false. Used only in inbound eviction logic. */
|
||||
/** Whether we should relay transactions to this peer. This only changes
|
||||
* from false to true. It will never change back to false. */
|
||||
std::atomic_bool m_relays_txs{false};
|
||||
|
||||
/** Whether this peer has loaded a bloom filter. Used only in inbound
|
||||
|
|
|
@ -395,9 +395,7 @@ struct Peer {
|
|||
private:
|
||||
Mutex m_tx_relay_mutex;
|
||||
|
||||
/** Transaction relay data. Will be a nullptr if we're not relaying
|
||||
* transactions with this peer (e.g. if it's a block-relay-only peer or
|
||||
* the peer has sent us fRelay=false with bloom filters disabled). */
|
||||
/** Transaction relay data. May be a nullptr. */
|
||||
std::unique_ptr<TxRelay> m_tx_relay GUARDED_BY(m_tx_relay_mutex);
|
||||
};
|
||||
|
||||
|
@ -3261,12 +3259,14 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|||
}
|
||||
peer->m_starting_height = starting_height;
|
||||
|
||||
// We only initialize the Peer::TxRelay m_relay_txs data structure if:
|
||||
// Only initialize the Peer::TxRelay m_relay_txs data structure if:
|
||||
// - this isn't an outbound block-relay-only connection, and
|
||||
// - this isn't an outbound feeler connection, and
|
||||
// - fRelay=true (the peer wishes to receive transaction announcements)
|
||||
// or we're offering NODE_BLOOM to this peer. NODE_BLOOM means that
|
||||
// the peer may turn on transaction relay later.
|
||||
if (!pfrom.IsBlockOnlyConn() &&
|
||||
!pfrom.IsFeelerConn() &&
|
||||
(fRelay || (peer->m_our_services & NODE_BLOOM))) {
|
||||
auto* const tx_relay = peer->SetTxRelay();
|
||||
{
|
||||
|
|
|
@ -39,6 +39,12 @@ class SendTxrcnclReceiver(P2PInterface):
|
|||
def on_sendtxrcncl(self, message):
|
||||
self.sendtxrcncl_msg_received = message
|
||||
|
||||
|
||||
class P2PFeelerReceiver(SendTxrcnclReceiver):
|
||||
def on_version(self, message):
|
||||
pass # feeler connections can not send any message other than their own version
|
||||
|
||||
|
||||
class PeerTrackMsgOrder(P2PInterface):
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
@ -163,6 +169,11 @@ class SendTxRcnclTest(BitcoinTestFramework):
|
|||
assert not peer.sendtxrcncl_msg_received
|
||||
peer.peer_disconnect()
|
||||
|
||||
self.log.info("SENDTXRCNCL should not be sent if feeler")
|
||||
peer = self.nodes[0].add_outbound_p2p_connection(P2PFeelerReceiver(), p2p_idx=2, connection_type="feeler")
|
||||
assert not peer.sendtxrcncl_msg_received
|
||||
peer.peer_disconnect()
|
||||
|
||||
self.log.info('SENDTXRCNCL if block-relay-only triggers a disconnect')
|
||||
peer = self.nodes[0].add_outbound_p2p_connection(
|
||||
PeerNoVerack(), wait_for_verack=False, p2p_idx=3, connection_type="block-relay-only")
|
||||
|
|
Loading…
Add table
Reference in a new issue