mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-06-15 11:21:32 +02:00
Add p2p message "wtxidrelay"
When sent to and received from a given peer, enables using wtxid's for announcing and fetching transactions with that peer.
This commit is contained in:
parent
2d282e0cba
commit
46d78d47de
@ -2342,6 +2342,10 @@ void ProcessMessage(
|
|||||||
if (pfrom.fInbound)
|
if (pfrom.fInbound)
|
||||||
PushNodeVersion(pfrom, connman, GetAdjustedTime());
|
PushNodeVersion(pfrom, connman, GetAdjustedTime());
|
||||||
|
|
||||||
|
if (nVersion >= WTXID_RELAY_VERSION) {
|
||||||
|
connman.PushMessage(&pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::WTXIDRELAY));
|
||||||
|
}
|
||||||
|
|
||||||
connman.PushMessage(&pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERACK));
|
connman.PushMessage(&pfrom, CNetMsgMaker(INIT_PROTO_VERSION).Make(NetMsgType::VERACK));
|
||||||
|
|
||||||
pfrom.nServices = nServices;
|
pfrom.nServices = nServices;
|
||||||
@ -2478,6 +2482,18 @@ void ProcessMessage(
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Feature negotiation of wtxidrelay should happen between VERSION and
|
||||||
|
// VERACK, to avoid relay problems from switching after a connection is up
|
||||||
|
if (msg_type == NetMsgType::WTXIDRELAY) {
|
||||||
|
if (pfrom.nVersion >= WTXID_RELAY_VERSION) {
|
||||||
|
LOCK(cs_main);
|
||||||
|
if (!State(pfrom.GetId())->m_wtxid_relay) {
|
||||||
|
State(pfrom.GetId())->m_wtxid_relay = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (!pfrom.fSuccessfullyConnected) {
|
if (!pfrom.fSuccessfullyConnected) {
|
||||||
// Must have a verack message before anything else
|
// Must have a verack message before anything else
|
||||||
LOCK(cs_main);
|
LOCK(cs_main);
|
||||||
|
@ -46,6 +46,7 @@ const char *GETCFHEADERS="getcfheaders";
|
|||||||
const char *CFHEADERS="cfheaders";
|
const char *CFHEADERS="cfheaders";
|
||||||
const char *GETCFCHECKPT="getcfcheckpt";
|
const char *GETCFCHECKPT="getcfcheckpt";
|
||||||
const char *CFCHECKPT="cfcheckpt";
|
const char *CFCHECKPT="cfcheckpt";
|
||||||
|
const char *WTXIDRELAY="wtxidrelay";
|
||||||
} // namespace NetMsgType
|
} // namespace NetMsgType
|
||||||
|
|
||||||
/** All known message types. Keep this in the same order as the list of
|
/** All known message types. Keep this in the same order as the list of
|
||||||
@ -83,6 +84,7 @@ const static std::string allNetMessageTypes[] = {
|
|||||||
NetMsgType::CFHEADERS,
|
NetMsgType::CFHEADERS,
|
||||||
NetMsgType::GETCFCHECKPT,
|
NetMsgType::GETCFCHECKPT,
|
||||||
NetMsgType::CFCHECKPT,
|
NetMsgType::CFCHECKPT,
|
||||||
|
NetMsgType::WTXIDRELAY,
|
||||||
};
|
};
|
||||||
const static std::vector<std::string> allNetMessageTypesVec(allNetMessageTypes, allNetMessageTypes+ARRAYLEN(allNetMessageTypes));
|
const static std::vector<std::string> allNetMessageTypesVec(allNetMessageTypes, allNetMessageTypes+ARRAYLEN(allNetMessageTypes));
|
||||||
|
|
||||||
|
@ -261,6 +261,12 @@ extern const char* GETCFCHECKPT;
|
|||||||
* evenly spaced filter headers for blocks on the requested chain.
|
* evenly spaced filter headers for blocks on the requested chain.
|
||||||
*/
|
*/
|
||||||
extern const char* CFCHECKPT;
|
extern const char* CFCHECKPT;
|
||||||
|
/**
|
||||||
|
* Indicates that a node prefers to relay transactions via wtxid, rather than
|
||||||
|
* txid.
|
||||||
|
* @since protocol version 70016 as described by BIP 339.
|
||||||
|
*/
|
||||||
|
extern const char *WTXIDRELAY;
|
||||||
}; // namespace NetMsgType
|
}; // namespace NetMsgType
|
||||||
|
|
||||||
/* Get a vector of all valid message types (see above) */
|
/* Get a vector of all valid message types (see above) */
|
||||||
@ -402,7 +408,7 @@ enum GetDataMsg : uint32_t {
|
|||||||
MSG_TX = 1,
|
MSG_TX = 1,
|
||||||
MSG_BLOCK = 2,
|
MSG_BLOCK = 2,
|
||||||
MSG_WTX = 5, //!< Defined in BIP 339
|
MSG_WTX = 5, //!< Defined in BIP 339
|
||||||
// The following can only occur in getdata. Invs always use TX or BLOCK.
|
// The following can only occur in getdata. Invs always use TX/WTX or BLOCK.
|
||||||
MSG_FILTERED_BLOCK = 3, //!< Defined in BIP37
|
MSG_FILTERED_BLOCK = 3, //!< Defined in BIP37
|
||||||
MSG_CMPCT_BLOCK = 4, //!< Defined in BIP152
|
MSG_CMPCT_BLOCK = 4, //!< Defined in BIP152
|
||||||
MSG_WITNESS_BLOCK = MSG_BLOCK | MSG_WITNESS_FLAG, //!< Defined in BIP144
|
MSG_WITNESS_BLOCK = MSG_BLOCK | MSG_WITNESS_FLAG, //!< Defined in BIP144
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
* network protocol versioning
|
* network protocol versioning
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const int PROTOCOL_VERSION = 70015;
|
static const int PROTOCOL_VERSION = 70016;
|
||||||
|
|
||||||
//! initial proto version, to be increased after version/verack negotiation
|
//! initial proto version, to be increased after version/verack negotiation
|
||||||
static const int INIT_PROTO_VERSION = 209;
|
static const int INIT_PROTO_VERSION = 209;
|
||||||
@ -35,4 +35,7 @@ static const int SHORT_IDS_BLOCKS_VERSION = 70014;
|
|||||||
//! not banning for invalid compact blocks starts with this version
|
//! not banning for invalid compact blocks starts with this version
|
||||||
static const int INVALID_CB_NO_BAN_VERSION = 70015;
|
static const int INVALID_CB_NO_BAN_VERSION = 70015;
|
||||||
|
|
||||||
|
//! "wtxidrelay" command for wtxid-based relay starts with this version
|
||||||
|
static const int WTXID_RELAY_VERSION = 70016;
|
||||||
|
|
||||||
#endif // BITCOIN_VERSION_H
|
#endif // BITCOIN_VERSION_H
|
||||||
|
Loading…
x
Reference in New Issue
Block a user