Skip to content

Bitcoin accepted at checkout  |  Ships from Montreal, QC, Canada  |  Expert support since 2016

Bitcoin P2P Network Message Reference: The Complete Wire Vocabulary

Every Bitcoin node — from a Raspberry Pi in a closet to a mining pool’s infrastructure — speaks the same small wire vocabulary. This reference lists every P2P network message currently defined in Bitcoin Core, grouped by where it sits in the protocol flow: the version/verack handshake and its modern feature negotiations, address gossip, inv-based transaction relay, header-first and compact-block relay, both filter families, and connection control. It completes our node-operator set alongside the RPC reference and the bitcoin.conf reference: what your node says to you (RPC), how you configure it (bitcoin.conf), and what it says to the network (this page).

Quick answer

Bitcoin speaks a peer-to-peer protocol of just 36 message types — that's the whole wire vocabulary. Every connection starts with the same handshake (version → optional negotiations like wtxidrelay and sendaddrv2 → verack), and everything after that is relay: peer addresses, transaction announcements via inv/getdata/tx, and blocks via headers or BIP152 compact blocks. This reference lists every message currently defined in Bitcoin Core (src/protocol.h, verified 1:1 against ALL_NET_MESSAGE_TYPES), what it does, the BIP that introduced it where the source states one, and where it sits in the protocol flow. The long-removed alert and reject messages are deliberately excluded.

The direction and group columns are D-Central editorial classifications — the source defines neither. The "feature" message (BIP434) is brand new in 2026: Core defines the message but no feature IDs are assigned yet. Free CSV/JSON under CC BY 4.0; as-of 2026-07-26, Core master commit cf0f2ae.

Download CSV Download JSON REST API →

Handshake & feature negotiation 6

MessagePurposeBIPDirection
versionProvides information about the transmitting node to the receiving node at the beginning of a connection. Each peer sends one as the first message.both
verackAcknowledges a previously-received version message, informing the connecting node that it can begin to send other messages.response
wtxidrelayIndicates that a node prefers to relay transactions via wtxid rather than txid. Sent during the handshake, before verack (protocol version 70016+).BIP339announcement
sendaddrv2Signals support for receiving addrv2 messages; also implies the sender can encode addrv2 and will send it instead of addr to peers that signaled the same. Sent before verack.BIP155announcement
sendtxrcnclContains a 4-byte version number and an 8-byte salt used to compute short txids for efficient transaction reconciliation (Erlay). Negotiated during the handshake.BIP330announcement
featureGeneric peer feature negotiation message: announces and negotiates support of new P2P features without bumping the protocol version. New in 2026; Core defines the message but no feature IDs are assigned yet.BIP434announcement

Address relay 3

MessagePurposeBIPDirection
addrRelays connection information (IP addresses) for peers on the network.announcement
addrv2Relays peer connection information like addr, but extended to allow gossiping of longer node addresses (e.g. Tor v3, I2P).BIP155announcement
getaddrRequests an addr message from the receiving node, preferably one with many IP addresses of other receiving nodes.request

Transaction relay 5

MessagePurposeBIPDirection
invTransmits one or more inventories (tx/block object identifiers) known to the transmitting peer. Used to announce both transactions and blocks.announcement
getdataRequests one or more data objects (transactions, blocks, merkle blocks, compact blocks) from another node, typically after an inv.request
txTransmits a single transaction, typically in reply to a getdata request for an announced transaction.response
mempoolRequests the TXIDs of transactions the receiving node has verified as valid but which have not yet appeared in a block. Only available with service bit NODE_BLOOM (BIP111).BIP35request
feefilterTells the receiving peer not to inv any transactions that do not meet the specified minimum fee rate.BIP133announcement

Block relay 9

MessagePurposeBIPDirection
getblocksRequests an inv message providing block header hashes starting from a particular point in the block chain (legacy block-first sync).request
getheadersRequests a headers message providing block headers starting from a particular point in the block chain (protocol version 31800+).request
headersSends one or more block headers, either in reply to getheaders or as an unsolicited new-block announcement when the peer sent sendheaders.both
blockTransmits a single serialized block, typically in reply to a getdata request.response
sendheadersIndicates the node prefers to receive new block announcements via a headers message rather than an inv.BIP130announcement
sendcmpctContains a 1-byte bool and 8-byte LE version number; indicates willingness to provide blocks via cmpctblock messages, and may indicate a preference to receive new block announcements as cmpctblock rather than inv.BIP152announcement
cmpctblockContains a CBlockHeaderAndShortTxIDs object providing a block header plus a list of short txids — sent as a high-bandwidth block announcement or in reply to a getdata compact-block request.BIP152both
getblocktxnContains a BlockTransactionsRequest asking for the transactions of a compact block that the receiver could not reconstruct from its mempool; peer should respond with blocktxn.BIP152request
blocktxnContains a BlockTransactions object with the requested transactions, sent in response to a getblocktxn message.BIP152response

Bloom filters (BIP37, legacy) 4

MessagePurposeBIPDirection
filterloadTells the receiving peer to filter all relayed transactions and requested merkle blocks through the provided bloom filter. Only available with service bit NODE_BLOOM (BIP111).BIP37request
filteraddTells the receiving peer to add a single element (such as a new public key) to a previously-set bloom filter. Only available with service bit NODE_BLOOM (BIP111).BIP37request
filterclearTells the receiving peer to remove a previously-set bloom filter. Only available with service bit NODE_BLOOM (BIP111).BIP37request
merkleblockReply to a getdata message that requested a block using the inventory type MSG_MERKLEBLOCK — a filtered block with a partial merkle tree.BIP37response

Compact block filters (BIP157/158) 6

MessagePurposeBIPDirection
getcfiltersRequests compact block filters for a range of blocks. Only available with service bit NODE_COMPACT_FILTERS.BIP157 / BIP158request
cfilterResponse to a getcfilters request containing a single compact filter.BIP157 / BIP158response
getcfheadersRequests 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. Only available with service bit NODE_COMPACT_FILTERS.BIP157 / BIP158request
cfheadersResponse to a getcfheaders request containing a filter header and a vector of filter hashes for each subsequent block in the requested range.BIP157 / BIP158response
getcfcheckptRequests evenly spaced compact filter headers, enabling parallelized download and validation of the headers between them. Only available with service bit NODE_COMPACT_FILTERS.BIP157 / BIP158request
cfcheckptResponse to a getcfcheckpt request containing a vector of evenly spaced filter headers for blocks on the requested chain.BIP157 / BIP158response

Connection control 3

MessagePurposeBIPDirection
pingSent periodically to help confirm that the receiving peer is still connected.request
pongReplies to a ping message, proving to the pinging node that the ponging node is still alive (protocol version 60001+, BIP31).BIP31response
notfoundReply to a getdata message that requested an object the receiving node does not have available for relay (protocol version 70001+).response

Source: Bitcoin Core src/protocol.h (NetMsgType namespace, verified 1:1 against ALL_NET_MESSAGE_TYPES, commit cf0f2ae, 2026-07-21) + the BIP-0434 text. Completes the Bitcoin Core RPC reference and the bitcoin.conf reference — the full sovereign node-operator stack.