{
    "meta": {
        "title": "D-Central — Bitcoin P2P Network Message Reference",
        "description": "All 36 wire messages currently defined in Bitcoin Core (NetMsgType, src/protocol.h): purpose, introducing BIP where stated, and protocol-flow group. Excludes the removed alert/reject messages.",
        "generated": "2026-07-26T05:30:52+00:00",
        "version": "1.0",
        "as_of": "2026-07-26",
        "license": "https://creativecommons.org/licenses/by/4.0/",
        "license_name": "CC BY 4.0",
        "source": "https://d-central.tech/bitcoin-p2p-message-reference/",
        "method": "Extracted from Bitcoin Core src/protocol.h (NetMsgType namespace, verified 1:1 against ALL_NET_MESSAGE_TYPES) at commit cf0f2ae (2026-07-21). Purposes are faithful plain-English paraphrases of the verbatim doc comments; BIP attributions are stated in the source comments (BIP434 verified against the BIP text directly). Direction and group columns are D-Central editorial classifications, not fields of the source.",
        "provenance": "Bitcoin Core (github.com/bitcoin/bitcoin) src/protocol.h; bitcoin/bips for BIP-0434.",
        "record_count": 36
    },
    "rows": [
        {
            "msg": "version",
            "direction": "both",
            "purpose": "Provides information about the transmitting node to the receiving node at the beginning of a connection. Each peer sends one as the first message.",
            "bip": "—",
            "group": "handshake"
        },
        {
            "msg": "verack",
            "direction": "response",
            "purpose": "Acknowledges a previously-received version message, informing the connecting node that it can begin to send other messages.",
            "bip": "—",
            "group": "handshake"
        },
        {
            "msg": "wtxidrelay",
            "direction": "announcement",
            "purpose": "Indicates that a node prefers to relay transactions via wtxid rather than txid. Sent during the handshake, before verack (protocol version 70016+).",
            "bip": "BIP339",
            "group": "handshake"
        },
        {
            "msg": "sendaddrv2",
            "direction": "announcement",
            "purpose": "Signals 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.",
            "bip": "BIP155",
            "group": "handshake"
        },
        {
            "msg": "sendtxrcncl",
            "direction": "announcement",
            "purpose": "Contains a 4-byte version number and an 8-byte salt used to compute short txids for efficient transaction reconciliation (Erlay). Negotiated during the handshake.",
            "bip": "BIP330",
            "group": "handshake"
        },
        {
            "msg": "feature",
            "direction": "announcement",
            "purpose": "Generic 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.",
            "bip": "BIP434",
            "group": "handshake"
        },
        {
            "msg": "addr",
            "direction": "announcement",
            "purpose": "Relays connection information (IP addresses) for peers on the network.",
            "bip": "—",
            "group": "addr-relay"
        },
        {
            "msg": "addrv2",
            "direction": "announcement",
            "purpose": "Relays peer connection information like addr, but extended to allow gossiping of longer node addresses (e.g. Tor v3, I2P).",
            "bip": "BIP155",
            "group": "addr-relay"
        },
        {
            "msg": "getaddr",
            "direction": "request",
            "purpose": "Requests an addr message from the receiving node, preferably one with many IP addresses of other receiving nodes.",
            "bip": "—",
            "group": "addr-relay"
        },
        {
            "msg": "inv",
            "direction": "announcement",
            "purpose": "Transmits one or more inventories (tx/block object identifiers) known to the transmitting peer. Used to announce both transactions and blocks.",
            "bip": "—",
            "group": "tx-relay"
        },
        {
            "msg": "getdata",
            "direction": "request",
            "purpose": "Requests one or more data objects (transactions, blocks, merkle blocks, compact blocks) from another node, typically after an inv.",
            "bip": "—",
            "group": "tx-relay"
        },
        {
            "msg": "tx",
            "direction": "response",
            "purpose": "Transmits a single transaction, typically in reply to a getdata request for an announced transaction.",
            "bip": "—",
            "group": "tx-relay"
        },
        {
            "msg": "mempool",
            "direction": "request",
            "purpose": "Requests 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).",
            "bip": "BIP35",
            "group": "tx-relay"
        },
        {
            "msg": "feefilter",
            "direction": "announcement",
            "purpose": "Tells the receiving peer not to inv any transactions that do not meet the specified minimum fee rate.",
            "bip": "BIP133",
            "group": "tx-relay"
        },
        {
            "msg": "getblocks",
            "direction": "request",
            "purpose": "Requests an inv message providing block header hashes starting from a particular point in the block chain (legacy block-first sync).",
            "bip": "—",
            "group": "block-relay"
        },
        {
            "msg": "getheaders",
            "direction": "request",
            "purpose": "Requests a headers message providing block headers starting from a particular point in the block chain (protocol version 31800+).",
            "bip": "—",
            "group": "block-relay"
        },
        {
            "msg": "headers",
            "direction": "both",
            "purpose": "Sends one or more block headers, either in reply to getheaders or as an unsolicited new-block announcement when the peer sent sendheaders.",
            "bip": "—",
            "group": "block-relay"
        },
        {
            "msg": "block",
            "direction": "response",
            "purpose": "Transmits a single serialized block, typically in reply to a getdata request.",
            "bip": "—",
            "group": "block-relay"
        },
        {
            "msg": "sendheaders",
            "direction": "announcement",
            "purpose": "Indicates the node prefers to receive new block announcements via a headers message rather than an inv.",
            "bip": "BIP130",
            "group": "block-relay"
        },
        {
            "msg": "sendcmpct",
            "direction": "announcement",
            "purpose": "Contains 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.",
            "bip": "BIP152",
            "group": "block-relay"
        },
        {
            "msg": "cmpctblock",
            "direction": "both",
            "purpose": "Contains 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.",
            "bip": "BIP152",
            "group": "block-relay"
        },
        {
            "msg": "getblocktxn",
            "direction": "request",
            "purpose": "Contains a BlockTransactionsRequest asking for the transactions of a compact block that the receiver could not reconstruct from its mempool; peer should respond with blocktxn.",
            "bip": "BIP152",
            "group": "block-relay"
        },
        {
            "msg": "blocktxn",
            "direction": "response",
            "purpose": "Contains a BlockTransactions object with the requested transactions, sent in response to a getblocktxn message.",
            "bip": "BIP152",
            "group": "block-relay"
        },
        {
            "msg": "filterload",
            "direction": "request",
            "purpose": "Tells 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).",
            "bip": "BIP37",
            "group": "filters-bip37"
        },
        {
            "msg": "filteradd",
            "direction": "request",
            "purpose": "Tells 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).",
            "bip": "BIP37",
            "group": "filters-bip37"
        },
        {
            "msg": "filterclear",
            "direction": "request",
            "purpose": "Tells the receiving peer to remove a previously-set bloom filter. Only available with service bit NODE_BLOOM (BIP111).",
            "bip": "BIP37",
            "group": "filters-bip37"
        },
        {
            "msg": "merkleblock",
            "direction": "response",
            "purpose": "Reply to a getdata message that requested a block using the inventory type MSG_MERKLEBLOCK — a filtered block with a partial merkle tree.",
            "bip": "BIP37",
            "group": "filters-bip37"
        },
        {
            "msg": "getcfilters",
            "direction": "request",
            "purpose": "Requests compact block filters for a range of blocks. Only available with service bit NODE_COMPACT_FILTERS.",
            "bip": "BIP157/158",
            "group": "filters-bip157"
        },
        {
            "msg": "cfilter",
            "direction": "response",
            "purpose": "Response to a getcfilters request containing a single compact filter.",
            "bip": "BIP157/158",
            "group": "filters-bip157"
        },
        {
            "msg": "getcfheaders",
            "direction": "request",
            "purpose": "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. Only available with service bit NODE_COMPACT_FILTERS.",
            "bip": "BIP157/158",
            "group": "filters-bip157"
        },
        {
            "msg": "cfheaders",
            "direction": "response",
            "purpose": "Response to a getcfheaders request containing a filter header and a vector of filter hashes for each subsequent block in the requested range.",
            "bip": "BIP157/158",
            "group": "filters-bip157"
        },
        {
            "msg": "getcfcheckpt",
            "direction": "request",
            "purpose": "Requests evenly spaced compact filter headers, enabling parallelized download and validation of the headers between them. Only available with service bit NODE_COMPACT_FILTERS.",
            "bip": "BIP157/158",
            "group": "filters-bip157"
        },
        {
            "msg": "cfcheckpt",
            "direction": "response",
            "purpose": "Response to a getcfcheckpt request containing a vector of evenly spaced filter headers for blocks on the requested chain.",
            "bip": "BIP157/158",
            "group": "filters-bip157"
        },
        {
            "msg": "ping",
            "direction": "request",
            "purpose": "Sent periodically to help confirm that the receiving peer is still connected.",
            "bip": "—",
            "group": "control"
        },
        {
            "msg": "pong",
            "direction": "response",
            "purpose": "Replies to a ping message, proving to the pinging node that the ponging node is still alive (protocol version 60001+, BIP31).",
            "bip": "BIP31",
            "group": "control"
        },
        {
            "msg": "notfound",
            "direction": "response",
            "purpose": "Reply to a getdata message that requested an object the receiving node does not have available for relay (protocol version 70001+).",
            "bip": "—",
            "group": "control"
        }
    ]
}