From 00c40784fe737ca67122fdec6538c450d2a516f3 Mon Sep 17 00:00:00 2001 From: Matt Corallo Date: Mon, 6 Jun 2016 01:26:52 -0700 Subject: [PATCH] Add protocol messages for short-ids blocks --- src/protocol.cpp | 13 +++++++++++-- src/protocol.h | 31 +++++++++++++++++++++++++++++-- src/version.h | 5 ++++- 3 files changed, 44 insertions(+), 5 deletions(-) diff --git a/src/protocol.cpp b/src/protocol.cpp index 422ef6f63..2f90fb764 100644 --- a/src/protocol.cpp +++ b/src/protocol.cpp @@ -35,6 +35,10 @@ const char *FILTERCLEAR="filterclear"; const char *REJECT="reject"; const char *SENDHEADERS="sendheaders"; const char *FEEFILTER="feefilter"; +const char *SENDCMPCT="sendcmpct"; +const char *CMPCTBLOCK="cmpctblock"; +const char *GETBLOCKTXN="getblocktxn"; +const char *BLOCKTXN="blocktxn"; }; static const char* ppszTypeName[] = @@ -42,7 +46,8 @@ static const char* ppszTypeName[] = "ERROR", // Should never occur NetMsgType::TX, NetMsgType::BLOCK, - "filtered block" // Should never occur + "filtered block", // Should never occur + "compact block" // Should never occur }; /** All known message types. Keep this in the same order as the list of @@ -70,7 +75,11 @@ const static std::string allNetMessageTypes[] = { NetMsgType::FILTERCLEAR, NetMsgType::REJECT, NetMsgType::SENDHEADERS, - NetMsgType::FEEFILTER + NetMsgType::FEEFILTER, + NetMsgType::SENDCMPCT, + NetMsgType::CMPCTBLOCK, + NetMsgType::GETBLOCKTXN, + NetMsgType::BLOCKTXN, }; const static std::vector allNetMessageTypesVec(allNetMessageTypes, allNetMessageTypes+ARRAYLEN(allNetMessageTypes)); diff --git a/src/protocol.h b/src/protocol.h index ab0a58178..a72813e95 100644 --- a/src/protocol.h +++ b/src/protocol.h @@ -217,6 +217,32 @@ extern const char *SENDHEADERS; * @since protocol version 70013 as described by BIP133 */ extern const char *FEEFILTER; +/** + * Contains a 1-byte bool and 8-byte LE version number. + * Indicates that a node is willing to provide blocks via "cmpctblock" messages. + * May indicate that a node prefers to receive new block announcements via a + * "cmpctblock" message rather than an "inv", depending on message contents. + * @since protocol version 70014 as described by BIP 152 + */ +extern const char *SENDCMPCT; +/** + * Contains a CBlockHeaderAndShortTxIDs object - providing a header and + * list of "short txids". + * @since protocol version 70014 as described by BIP 152 + */ +extern const char *CMPCTBLOCK; +/** + * Contains a BlockTransactionsRequest + * Peer should respond with "blocktxn" message. + * @since protocol version 70014 as described by BIP 152 + */ +extern const char *GETBLOCKTXN; +/** + * Contains a BlockTransactions. + * Sent in response to a "getblocktxn" message. + * @since protocol version 70014 as described by BIP 152 + */ +extern const char *BLOCKTXN; }; /* Get a vector of all valid message types (see above) */ @@ -315,9 +341,10 @@ public: enum { MSG_TX = 1, MSG_BLOCK, - // Nodes may always request a MSG_FILTERED_BLOCK in a getdata, however, - // MSG_FILTERED_BLOCK should not appear in any invs except as a part of getdata. + // Nodes may always request a MSG_FILTERED_BLOCK/MSG_CMPCT_BLOCK in a getdata, however, + // MSG_FILTERED_BLOCK/MSG_CMPCT_BLOCK should not appear in any invs except as a part of getdata. MSG_FILTERED_BLOCK, + MSG_CMPCT_BLOCK, }; #endif // BITCOIN_PROTOCOL_H diff --git a/src/version.h b/src/version.h index 0e1d8a63c..68ccd6d37 100644 --- a/src/version.h +++ b/src/version.h @@ -9,7 +9,7 @@ * network protocol versioning */ -static const int PROTOCOL_VERSION = 70013; +static const int PROTOCOL_VERSION = 70014; //! initial proto version, to be increased after version/verack negotiation static const int INIT_PROTO_VERSION = 209; @@ -39,4 +39,7 @@ static const int SENDHEADERS_VERSION = 70012; //! "feefilter" tells peers to filter invs to you by fee starts with this version static const int FEEFILTER_VERSION = 70013; +//! shord-id-based block download starts with this version +static const int SHORT_IDS_BLOCKS_VERSION = 70014; + #endif // BITCOIN_VERSION_H