Bitcoin Core 31.0.0
P2P Digital Currency
Loading...
Searching...
No Matches
Classes | Namespaces | Enumerations | Functions | Variables
protocol.h File Reference
#include <kernel/messagestartchars.h>
#include <netaddress.h>
#include <primitives/transaction.h>
#include <serialize.h>
#include <streams.h>
#include <uint256.h>
#include <util/time.h>
#include <array>
#include <cstdint>
#include <limits>
#include <string>
Include dependency graph for protocol.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

class  CMessageHeader
 Message header. More...
 
class  CAddress
 A CService with information about it as peer. More...
 
struct  CAddress::SerParams
 
class  CInv
 inv message data More...
 

Namespaces

namespace  NetMsgType
 Bitcoin protocol message types.
 

Enumerations

enum  ServiceFlags : uint64_t {
  NODE_NONE = 0 , NODE_NETWORK = (1 << 0) , NODE_BLOOM = (1 << 2) , NODE_WITNESS = (1 << 3) ,
  NODE_COMPACT_FILTERS = (1 << 6) , NODE_NETWORK_LIMITED = (1 << 10) , NODE_P2P_V2 = (1 << 11)
}
 nServices flags More...
 
enum  GetDataMsg : uint32_t {
  UNDEFINED = 0 , MSG_TX = 1 , MSG_BLOCK = 2 , MSG_WTX = 5 ,
  MSG_FILTERED_BLOCK = 3 , MSG_CMPCT_BLOCK = 4 , MSG_WITNESS_BLOCK = MSG_BLOCK | MSG_WITNESS_FLAG , MSG_WITNESS_TX = MSG_TX | MSG_WITNESS_FLAG
}
 getdata / inv message types. More...
 

Functions

std::vector< std::string > serviceFlagsToStr (uint64_t flags)
 Convert service flags (a bitmask of NODE_*) to human readable strings.
 
constexpr ServiceFlags SeedsServiceFlags ()
 State independent service flags.
 
static bool MayHaveUsefulAddressDB (ServiceFlags services)
 Checks if a peer with the given service flags may be capable of having a robust address-storage DB.
 
GenTxid ToGenTxid (const CInv &inv)
 Convert a TX/WITNESS_TX/WTX CInv to a GenTxid.
 

Variables

constexpr const charNetMsgType::VERSION {"version"}
 The version message provides information about the transmitting node to the receiving node at the beginning of a connection.
 
constexpr const charNetMsgType::VERACK {"verack"}
 The verack message acknowledges a previously-received version message, informing the connecting node that it can begin to send other messages.
 
constexpr const charNetMsgType::ADDR {"addr"}
 The addr (IP address) message relays connection information for peers on the network.
 
constexpr const charNetMsgType::ADDRV2 {"addrv2"}
 The addrv2 message relays connection information for peers on the network just like the addr message, but is extended to allow gossiping of longer node addresses (see BIP155).
 
constexpr const charNetMsgType::SENDADDRV2 {"sendaddrv2"}
 The sendaddrv2 message signals support for receiving ADDRV2 messages (BIP155).
 
constexpr const charNetMsgType::INV {"inv"}
 The inv message (inventory message) transmits one or more inventories of objects known to the transmitting peer.
 
constexpr const charNetMsgType::GETDATA {"getdata"}
 The getdata message requests one or more data objects from another node.
 
constexpr const charNetMsgType::MERKLEBLOCK {"merkleblock"}
 The merkleblock message is a reply to a getdata message which requested a block using the inventory type MSG_MERKLEBLOCK.
 
constexpr const charNetMsgType::GETBLOCKS {"getblocks"}
 The getblocks message requests an inv message that provides block header hashes starting from a particular point in the block chain.
 
constexpr const charNetMsgType::GETHEADERS {"getheaders"}
 The getheaders message requests a headers message that provides block headers starting from a particular point in the block chain.
 
constexpr const charNetMsgType::TX {"tx"}
 The tx message transmits a single transaction.
 
constexpr const charNetMsgType::HEADERS {"headers"}
 The headers message sends one or more block headers to a node which previously requested certain headers with a getheaders message.
 
constexpr const charNetMsgType::BLOCK {"block"}
 The block message transmits a single serialized block.
 
constexpr const charNetMsgType::GETADDR {"getaddr"}
 The getaddr message requests an addr message from the receiving node, preferably one with lots of IP addresses of other receiving nodes.
 
constexpr const charNetMsgType::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.
 
constexpr const charNetMsgType::PING {"ping"}
 The ping message is sent periodically to help confirm that the receiving peer is still connected.
 
constexpr const charNetMsgType::PONG {"pong"}
 The pong message replies to a ping message, proving to the pinging node that the ponging node is still alive.
 
constexpr const charNetMsgType::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.
 
constexpr const charNetMsgType::FILTERLOAD {"filterload"}
 The filterload message tells the receiving peer to filter all relayed transactions and requested merkle blocks through the provided filter.
 
constexpr const charNetMsgType::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.
 
constexpr const charNetMsgType::FILTERCLEAR {"filterclear"}
 The filterclear message tells the receiving peer to remove a previously-set bloom filter.
 
constexpr const charNetMsgType::SENDHEADERS {"sendheaders"}
 Indicates that a node prefers to receive new block announcements via a "headers" message rather than an "inv".
 
constexpr const charNetMsgType::FEEFILTER {"feefilter"}
 The feefilter message tells the receiving peer not to inv us any txs which do not meet the specified min fee rate.
 
constexpr const charNetMsgType::SENDCMPCT {"sendcmpct"}
 Contains a 1-byte bool and 8-byte LE version number.
 
constexpr const charNetMsgType::CMPCTBLOCK {"cmpctblock"}
 Contains a CBlockHeaderAndShortTxIDs object - providing a header and list of "short txids".
 
constexpr const charNetMsgType::GETBLOCKTXN {"getblocktxn"}
 Contains a BlockTransactionsRequest Peer should respond with "blocktxn" message.
 
constexpr const charNetMsgType::BLOCKTXN {"blocktxn"}
 Contains a BlockTransactions.
 
constexpr const charNetMsgType::GETCFILTERS {"getcfilters"}
 getcfilters requests compact filters for a range of blocks.
 
constexpr const charNetMsgType::CFILTER {"cfilter"}
 cfilter is a response to a getcfilters request containing a single compact filter.
 
constexpr const charNetMsgType::GETCFHEADERS {"getcfheaders"}
 getcfheaders requests a compact filter header and the filter hashes for a range of blocks, which can then be used to reconstruct the filter headers for those blocks.
 
constexpr const charNetMsgType::CFHEADERS {"cfheaders"}
 cfheaders is a response to a getcfheaders request containing a filter header and a vector of filter hashes for each subsequent block in the requested range.
 
constexpr const charNetMsgType::GETCFCHECKPT {"getcfcheckpt"}
 getcfcheckpt requests evenly spaced compact filter headers, enabling parallelized download and validation of the headers between them.
 
constexpr const charNetMsgType::CFCHECKPT {"cfcheckpt"}
 cfcheckpt is a response to a getcfcheckpt request containing a vector of evenly spaced filter headers for blocks on the requested chain.
 
constexpr const charNetMsgType::WTXIDRELAY {"wtxidrelay"}
 Indicates that a node prefers to relay transactions via wtxid, rather than txid.
 
constexpr const charNetMsgType::SENDTXRCNCL {"sendtxrcncl"}
 Contains a 4-byte version number and an 8-byte salt.
 
const std::array ALL_NET_MESSAGE_TYPES
 All known message types (see above).
 
const uint32_t MSG_WITNESS_FLAG = 1 << 30
 getdata message type flags
 
const uint32_t MSG_TYPE_MASK = 0xffffffff >> 2
 

Enumeration Type Documentation

◆ GetDataMsg

getdata / inv message types.

These numbers are defined by the protocol. When adding a new value, be sure to mention it in the respective BIP.

Enumerator
UNDEFINED 
MSG_TX 
MSG_BLOCK 
MSG_WTX 

Defined in BIP 339.

MSG_FILTERED_BLOCK 

Defined in BIP37.

MSG_CMPCT_BLOCK 

Defined in BIP152.

MSG_WITNESS_BLOCK 

Defined in BIP144.

MSG_WITNESS_TX 

Defined in BIP144.

Definition at line 477 of file protocol.h.

◆ ServiceFlags

nServices flags

Enumerator
NODE_NONE 
NODE_NETWORK 
NODE_BLOOM 
NODE_WITNESS 
NODE_COMPACT_FILTERS 
NODE_NETWORK_LIMITED 
NODE_P2P_V2 

Definition at line 309 of file protocol.h.

Function Documentation

◆ MayHaveUsefulAddressDB()

static bool MayHaveUsefulAddressDB ( ServiceFlags services)
inlinestatic

Checks if a peer with the given service flags may be capable of having a robust address-storage DB.

Definition at line 360 of file protocol.h.

Here is the caller graph for this function:

◆ SeedsServiceFlags()

constexpr ServiceFlags SeedsServiceFlags ( )
constexpr

State independent service flags.

If the return value is changed, contrib/seeds/makeseeds.py should be updated appropriately to filter for nodes with desired service flags (compatible with our new flags).

Definition at line 354 of file protocol.h.

Here is the caller graph for this function:

◆ serviceFlagsToStr()

std::vector< std::string > serviceFlagsToStr ( uint64_t flags)

Convert service flags (a bitmask of NODE_*) to human readable strings.

It supports unknown service flags which will be returned as "UNKNOWN[...]".

Parameters
[in]flagsmultiple NODE_* bitwise-OR-ed together

Definition at line 108 of file protocol.cpp.

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

◆ ToGenTxid()

GenTxid ToGenTxid ( const CInv & inv)

Convert a TX/WITNESS_TX/WTX CInv to a GenTxid.

Definition at line 121 of file protocol.cpp.

Here is the call graph for this function:

Variable Documentation

◆ ALL_NET_MESSAGE_TYPES

const std::array ALL_NET_MESSAGE_TYPES
inline

All known message types (see above).

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

Definition at line 270 of file protocol.h.

◆ MSG_TYPE_MASK

const uint32_t MSG_TYPE_MASK = 0xffffffff >> 2

Definition at line 471 of file protocol.h.

◆ MSG_WITNESS_FLAG

const uint32_t MSG_WITNESS_FLAG = 1 << 30

getdata message type flags

Definition at line 470 of file protocol.h.