Bitcoin Core  0.19.99
P2P Digital Currency
Namespaces | Functions | Variables
protocol.cpp File Reference
#include <protocol.h>
#include <util/system.h>
#include <util/strencodings.h>
#include <arpa/inet.h>
Include dependency graph for protocol.cpp:

Go to the source code of this file.

Namespaces

 NetMsgType
 Bitcoin protocol message types.
 

Functions

static std::atomic< bool > g_initial_block_download_completed (false)
 
static const std::vector< std::string > allNetMessageTypesVec (allNetMessageTypes, allNetMessageTypes+ARRAYLEN(allNetMessageTypes))
 
ServiceFlags GetDesirableServiceFlags (ServiceFlags services)
 Gets the set of service flags which are "desirable" for a given peer. More...
 
void SetServiceFlagsIBDCache (bool state)
 Set the current IBD status in order to figure out the desirable service flags. More...
 
bool operator< (const CInv &a, const CInv &b)
 
const std::vector< std::string > & getAllNetMessageTypes ()
 

Variables

const char * NetMsgType::VERSION ="version"
 The version message provides information about the transmitting node to the receiving node at the beginning of a connection. More...
 
const char * NetMsgType::VERACK ="verack"
 The verack message acknowledges a previously-received version message, informing the connecting node that it can begin to send other messages. More...
 
const char * NetMsgType::ADDR ="addr"
 The addr (IP address) message relays connection information for peers on the network. More...
 
const char * NetMsgType::INV ="inv"
 The inv message (inventory message) transmits one or more inventories of objects known to the transmitting peer. More...
 
const char * NetMsgType::GETDATA ="getdata"
 The getdata message requests one or more data objects from another node. More...
 
const char * NetMsgType::MERKLEBLOCK ="merkleblock"
 The merkleblock message is a reply to a getdata message which requested a block using the inventory type MSG_MERKLEBLOCK. More...
 
const char * NetMsgType::GETBLOCKS ="getblocks"
 The getblocks message requests an inv message that provides block header hashes starting from a particular point in the block chain. More...
 
const char * NetMsgType::GETHEADERS ="getheaders"
 The getheaders message requests a headers message that provides block headers starting from a particular point in the block chain. More...
 
const char * NetMsgType::TX ="tx"
 The tx message transmits a single transaction. More...
 
const char * NetMsgType::HEADERS ="headers"
 The headers message sends one or more block headers to a node which previously requested certain headers with a getheaders message. More...
 
const char * NetMsgType::BLOCK ="block"
 The block message transmits a single serialized block. More...
 
const char * NetMsgType::GETADDR ="getaddr"
 The getaddr message requests an addr message from the receiving node, preferably one with lots of IP addresses of other receiving nodes. More...
 
const char * NetMsgType::MEMPOOL ="mempool"
 The mempool message requests the TXIDs of transactions that the receiving node has verified as valid but which have not yet appeared in a block. More...
 
const char * NetMsgType::PING ="ping"
 The ping message is sent periodically to help confirm that the receiving peer is still connected. More...
 
const char * NetMsgType::PONG ="pong"
 The pong message replies to a ping message, proving to the pinging node that the ponging node is still alive. More...
 
const char * NetMsgType::NOTFOUND ="notfound"
 The notfound message is a reply to a getdata message which requested an object the receiving node does not have available for relay. More...
 
const char * NetMsgType::FILTERLOAD ="filterload"
 The filterload message tells the receiving peer to filter all relayed transactions and requested merkle blocks through the provided filter. More...
 
const char * NetMsgType::FILTERADD ="filteradd"
 The filteradd message tells the receiving peer to add a single element to a previously-set bloom filter, such as a new public key. More...
 
const char * NetMsgType::FILTERCLEAR ="filterclear"
 The filterclear message tells the receiving peer to remove a previously-set bloom filter. More...
 
const char * NetMsgType::SENDHEADERS ="sendheaders"
 Indicates that a node prefers to receive new block announcements via a "headers" message rather than an "inv". More...
 
const char * NetMsgType::FEEFILTER ="feefilter"
 The feefilter message tells the receiving peer not to inv us any txs which do not meet the specified min fee rate. More...
 
const char * NetMsgType::SENDCMPCT ="sendcmpct"
 Contains a 1-byte bool and 8-byte LE version number. More...
 
const char * NetMsgType::CMPCTBLOCK ="cmpctblock"
 Contains a CBlockHeaderAndShortTxIDs object - providing a header and list of "short txids". More...
 
const char * NetMsgType::GETBLOCKTXN ="getblocktxn"
 Contains a BlockTransactionsRequest Peer should respond with "blocktxn" message. More...
 
const char * NetMsgType::BLOCKTXN ="blocktxn"
 Contains a BlockTransactions. More...
 
static const std::string allNetMessageTypes []
 All known message types. More...
 

Function Documentation

◆ allNetMessageTypesVec()

static const std::vector<std::string> allNetMessageTypesVec ( allNetMessageTypes  ,
allNetMessageTypes ARRAYLENallNetMessageTypes 
)
static
Here is the caller graph for this function:

◆ g_initial_block_download_completed()

static std::atomic<bool> g_initial_block_download_completed ( false  )
static
Here is the caller graph for this function:

◆ getAllNetMessageTypes()

const std::vector<std::string>& getAllNetMessageTypes ( )

Definition at line 198 of file protocol.cpp.

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

◆ GetDesirableServiceFlags()

ServiceFlags GetDesirableServiceFlags ( ServiceFlags  services)

Gets the set of service flags which are "desirable" for a given peer.

These are the flags which are required for a peer to support for them to be "interesting" to us, ie for us to wish to use one of our few outbound connection slots for or for us to wish to prioritize keeping their connection around.

Relevant service flags may be peer- and state-specific in that the version of the peer may determine which flags are required (eg in the case of NODE_NETWORK_LIMITED where we seek out NODE_NETWORK peers unless they set NODE_NETWORK_LIMITED and we are out of IBD, in which case NODE_NETWORK_LIMITED suffices).

Thus, generally, avoid calling with peerServices == NODE_NONE, unless state-specific flags must absolutely be avoided. When called with peerServices == NODE_NONE, the returned desirable service flags are guaranteed to not change dependent on state - ie they are suitable for use when describing peers which we know to be desirable, but for which we do not have a confirmed set of service flags.

If the NODE_NONE return value is changed, contrib/seeds/makeseeds.py should be updated appropriately to filter for the same nodes.

Definition at line 130 of file protocol.cpp.

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

◆ operator<()

bool operator< ( const CInv a,
const CInv b 
)

Definition at line 167 of file protocol.cpp.

◆ SetServiceFlagsIBDCache()

void SetServiceFlagsIBDCache ( bool  state)

Set the current IBD status in order to figure out the desirable service flags.

Definition at line 137 of file protocol.cpp.

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

Variable Documentation

◆ allNetMessageTypes

const std::string allNetMessageTypes[]
static
Initial value:
= {
}
const char * PING
The ping message is sent periodically to help confirm that the receiving peer is still connected...
Definition: protocol.cpp:31
const char * FILTERLOAD
The filterload message tells the receiving peer to filter all relayed transactions and requested merk...
Definition: protocol.cpp:34
const char * MERKLEBLOCK
The merkleblock message is a reply to a getdata message which requested a block using the inventory t...
Definition: protocol.cpp:23
const char * BLOCKTXN
Contains a BlockTransactions.
Definition: protocol.cpp:42
const char * GETADDR
The getaddr message requests an addr message from the receiving node, preferably one with lots of IP ...
Definition: protocol.cpp:29
const char * SENDCMPCT
Contains a 1-byte bool and 8-byte LE version number.
Definition: protocol.cpp:39
const char * PONG
The pong message replies to a ping message, proving to the pinging node that the ponging node is stil...
Definition: protocol.cpp:32
const char * HEADERS
The headers message sends one or more block headers to a node which previously requested certain head...
Definition: protocol.cpp:27
const char * INV
The inv message (inventory message) transmits one or more inventories of objects known to the transmi...
Definition: protocol.cpp:21
const char * GETHEADERS
The getheaders message requests a headers message that provides block headers starting from a particu...
Definition: protocol.cpp:25
const char * SENDHEADERS
Indicates that a node prefers to receive new block announcements via a "headers" message rather than ...
Definition: protocol.cpp:37
const char * MEMPOOL
The mempool message requests the TXIDs of transactions that the receiving node has verified as valid ...
Definition: protocol.cpp:30
const char * ADDR
The addr (IP address) message relays connection information for peers on the network.
Definition: protocol.cpp:20
const char * FILTERCLEAR
The filterclear message tells the receiving peer to remove a previously-set bloom filter...
Definition: protocol.cpp:36
const char * NOTFOUND
The notfound message is a reply to a getdata message which requested an object the receiving node doe...
Definition: protocol.cpp:33
const char * BLOCK
The block message transmits a single serialized block.
Definition: protocol.cpp:28
const char * FEEFILTER
The feefilter message tells the receiving peer not to inv us any txs which do not meet the specified ...
Definition: protocol.cpp:38
const char * GETBLOCKS
The getblocks message requests an inv message that provides block header hashes starting from a parti...
Definition: protocol.cpp:24
const char * VERACK
The verack message acknowledges a previously-received version message, informing the connecting node ...
Definition: protocol.cpp:19
const char * CMPCTBLOCK
Contains a CBlockHeaderAndShortTxIDs object - providing a header and list of "short txids"...
Definition: protocol.cpp:40
const char * VERSION
The version message provides information about the transmitting node to the receiving node at the beg...
Definition: protocol.cpp:18
const char * GETDATA
The getdata message requests one or more data objects from another node.
Definition: protocol.cpp:22
const char * TX
The tx message transmits a single transaction.
Definition: protocol.cpp:26
const char * FILTERADD
The filteradd message tells the receiving peer to add a single element to a previously-set bloom filt...
Definition: protocol.cpp:35
const char * GETBLOCKTXN
Contains a BlockTransactionsRequest Peer should respond with "blocktxn" message.
Definition: protocol.cpp:41

All known message types.

Keep this in the same order as the list of messages above and in protocol.h.

Definition at line 48 of file protocol.cpp.