Bitcoin Core 31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
PrivateBroadcast Class Reference

Store a list of transactions to be broadcast privately. More...

#include <private_broadcast.h>

Collaboration diagram for PrivateBroadcast:
[legend]

Classes

struct  PeerSendInfo
struct  TxBroadcastInfo
struct  SendStatus
 Status of a transaction sent to a given node. More...
struct  Priority
 Cumulative stats from all the send attempts for a transaction. Used to prioritize transactions. More...
struct  TxAndSendStatusForNode
 A pair of a transaction and a sent status for a given node. Convenience return type of GetSendStatusByNode(). More...
struct  CTransactionRefHash
struct  CTransactionRefComp

Public Member Functions

bool Add (const CTransactionRef &tx) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Add a transaction to the storage.
std::optional< size_t > Remove (const CTransactionRef &tx) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Forget a transaction.
std::optional< CTransactionRefPickTxForSend (const NodeId &will_send_to_nodeid, const CService &will_send_to_address) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Pick the transaction with the fewest send attempts, and confirmations, and oldest send/confirm times.
std::optional< CTransactionRefGetTxForNode (const NodeId &nodeid) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Get the transaction that was picked for sending to a given node by PickTxForSend().
void NodeConfirmedReception (const NodeId &nodeid) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Mark that the node has confirmed reception of the transaction we sent it by responding with PONG to our PING message.
bool DidNodeConfirmReception (const NodeId &nodeid) EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Check if the node has confirmed reception of the transaction.
bool HavePendingTransactions () EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Check if there are transactions that need to be broadcast.
std::vector< CTransactionRefGetStale () const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Get the transactions that have not been broadcast recently.
std::vector< TxBroadcastInfoGetBroadcastInfo () const EXCLUSIVE_LOCKS_REQUIRED(!m_mutex)
 Get stats about all transactions currently being privately broadcast.

Private Member Functions

std::optional< TxAndSendStatusForNodeGetSendStatusByNode (const NodeId &nodeid) EXCLUSIVE_LOCKS_REQUIRED(m_mutex)
 Find which transaction we sent to a given node (marked by PickTxForSend()).
std::unordered_map< CTransactionRef, std::vector< SendStatus >, CTransactionRefHash, CTransactionRefComp > m_transactions GUARDED_BY (m_mutex)

Static Private Member Functions

static Priority DerivePriority (const std::vector< SendStatus > &sent_to)
 Derive the sending priority of a transaction.

Private Attributes

Mutex m_mutex

Detailed Description

Store a list of transactions to be broadcast privately.

Supports the following operations:

  • Add a new transaction
  • Remove a transaction
  • Pick a transaction for sending to one recipient
  • Query which transaction has been picked for sending to a given recipient node
  • Mark that a given recipient node has confirmed receipt of a transaction
  • Query whether a given recipient node has confirmed reception
  • Query whether any transactions that need sending are currently on the list

Definition at line 30 of file private_broadcast.h.

Member Function Documentation

◆ Add()

bool PrivateBroadcast::Add ( const CTransactionRef & tx)

Add a transaction to the storage.

Parameters
[in]txThe transaction to add.
Return values
trueThe transaction was added.
falseThe transaction was already present.

Definition at line 14 of file private_broadcast.cpp.

Here is the caller graph for this function:

◆ DerivePriority()

PrivateBroadcast::Priority PrivateBroadcast::DerivePriority ( const std::vector< SendStatus > & sent_to)
staticprivate

Derive the sending priority of a transaction.

Parameters
[in]sent_toList of nodes that the transaction has been sent to.

Definition at line 126 of file private_broadcast.cpp.

Here is the caller graph for this function:

◆ DidNodeConfirmReception()

bool PrivateBroadcast::DidNodeConfirmReception ( const NodeId & nodeid)

Check if the node has confirmed reception of the transaction.

Return values
trueNode has confirmed, NodeConfirmedReception() has been called.
falseNode has not confirmed, NodeConfirmedReception() has not been called.

Definition at line 74 of file private_broadcast.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetBroadcastInfo()

std::vector< PrivateBroadcast::TxBroadcastInfo > PrivateBroadcast::GetBroadcastInfo ( ) const

Get stats about all transactions currently being privately broadcast.

Definition at line 107 of file private_broadcast.cpp.

Here is the caller graph for this function:

◆ GetSendStatusByNode()

std::optional< PrivateBroadcast::TxAndSendStatusForNode > PrivateBroadcast::GetSendStatusByNode ( const NodeId & nodeid)
private

Find which transaction we sent to a given node (marked by PickTxForSend()).

Returns
That transaction together with the send status or nullopt if we did not send any transaction to the given node.

Definition at line 140 of file private_broadcast.cpp.

Here is the caller graph for this function:

◆ GetStale()

std::vector< CTransactionRef > PrivateBroadcast::GetStale ( ) const

Get the transactions that have not been broadcast recently.

Definition at line 92 of file private_broadcast.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GetTxForNode()

std::optional< CTransactionRef > PrivateBroadcast::GetTxForNode ( const NodeId & nodeid)

Get the transaction that was picked for sending to a given node by PickTxForSend().

Parameters
[in]nodeidNode to which a transaction is being (or was) sent.
Returns
Transaction or nullopt if the nodeid is unknown.

Definition at line 53 of file private_broadcast.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ GUARDED_BY()

std::unordered_map< CTransactionRef, std::vector< SendStatus >, CTransactionRefHash, CTransactionRefComp > m_transactions PrivateBroadcast::GUARDED_BY ( m_mutex )
private

◆ HavePendingTransactions()

bool PrivateBroadcast::HavePendingTransactions ( )

Check if there are transactions that need to be broadcast.

Definition at line 85 of file private_broadcast.cpp.

Here is the caller graph for this function:

◆ NodeConfirmedReception()

void PrivateBroadcast::NodeConfirmedReception ( const NodeId & nodeid)

Mark that the node has confirmed reception of the transaction we sent it by responding with PONG to our PING message.

Parameters
[in]nodeidNode that we sent a transaction to.

Definition at line 64 of file private_broadcast.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ PickTxForSend()

std::optional< CTransactionRef > PrivateBroadcast::PickTxForSend ( const NodeId & will_send_to_nodeid,
const CService & will_send_to_address )

Pick the transaction with the fewest send attempts, and confirmations, and oldest send/confirm times.

Parameters
[in]will_send_to_nodeidWill remember that the returned transaction was picked for sending to this node.
[in]will_send_to_addressAddress of the peer to which this transaction will be sent.
Returns
Most urgent transaction or nullopt if there are no transactions.

Definition at line 34 of file private_broadcast.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

◆ Remove()

std::optional< size_t > PrivateBroadcast::Remove ( const CTransactionRef & tx)

Forget a transaction.

Parameters
[in]txTransaction to forget.
Return values
!nulloptThe number of times the transaction was sent and confirmed by the recipient (if the transaction existed and was removed).
nulloptThe transaction was not in the storage.

Definition at line 22 of file private_broadcast.cpp.

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ m_mutex

Mutex PrivateBroadcast::m_mutex
mutableprivate

Definition at line 181 of file private_broadcast.h.


The documentation for this class was generated from the following files: