mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-21 07:39:08 +01: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:
committed by
John Newbery
parent
93826726e7
commit
181ffadd16
@@ -2055,6 +2055,10 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec
|
||||
if (pfrom->fInbound)
|
||||
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));
|
||||
|
||||
pfrom->nServices = nServices;
|
||||
@@ -2194,6 +2198,18 @@ bool ProcessMessage(CNode* pfrom, const std::string& msg_type, CDataStream& vRec
|
||||
return true;
|
||||
}
|
||||
|
||||
// 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 false;
|
||||
}
|
||||
|
||||
if (!pfrom->fSuccessfullyConnected) {
|
||||
// Must have a verack message before anything else
|
||||
LOCK(cs_main);
|
||||
|
||||
@@ -40,6 +40,7 @@ const char *SENDCMPCT="sendcmpct";
|
||||
const char *CMPCTBLOCK="cmpctblock";
|
||||
const char *GETBLOCKTXN="getblocktxn";
|
||||
const char *BLOCKTXN="blocktxn";
|
||||
const char *WTXIDRELAY="wtxidrelay";
|
||||
} // namespace NetMsgType
|
||||
|
||||
/** All known message types. Keep this in the same order as the list of
|
||||
@@ -71,6 +72,7 @@ const static std::string allNetMessageTypes[] = {
|
||||
NetMsgType::CMPCTBLOCK,
|
||||
NetMsgType::GETBLOCKTXN,
|
||||
NetMsgType::BLOCKTXN,
|
||||
NetMsgType::WTXIDRELAY,
|
||||
};
|
||||
const static std::vector<std::string> allNetMessageTypesVec(allNetMessageTypes, allNetMessageTypes+ARRAYLEN(allNetMessageTypes));
|
||||
|
||||
|
||||
@@ -234,6 +234,12 @@ extern const char *GETBLOCKTXN;
|
||||
* @since protocol version 70014 as described by BIP 152
|
||||
*/
|
||||
extern const char *BLOCKTXN;
|
||||
/**
|
||||
* 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;
|
||||
};
|
||||
|
||||
/* Get a vector of all valid message types (see above) */
|
||||
@@ -367,7 +373,7 @@ enum GetDataMsg : uint32_t {
|
||||
MSG_TX = 1,
|
||||
MSG_BLOCK = 2,
|
||||
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_CMPCT_BLOCK = 4, //!< Defined in BIP152
|
||||
MSG_WITNESS_BLOCK = MSG_BLOCK | MSG_WITNESS_FLAG, //!< Defined in BIP144
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
* 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
|
||||
static const int INIT_PROTO_VERSION = 209;
|
||||
@@ -42,4 +42,7 @@ static const int SHORT_IDS_BLOCKS_VERSION = 70014;
|
||||
//! not banning for invalid compact blocks starts with this version
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user