Add NODE_BLOOM service bit and bump protocol version
Lets nodes advertise that they offer bloom filter support explicitly. The protocol version bump allows SPV nodes to assume that NODE_BLOOM is set if NODE_NETWORK is set for pre-170004 nodes. Also adds an option to turn bloom filter support off for nodes which advertise a version number >= 170004. Nodes attempting to use bloom filters on such protocol versions are banned, and a later upgade should drop nodes of an older version which attempt to use bloom filters. Much code stolen from Peter Todd. Zcash: Implements Zcash equivalent of BIP 111; deploys with Overwinter
This commit is contained in:
parent
f5b1082f9c
commit
8bc4461326
|
@ -1025,6 +1025,9 @@ bool AppInit2(boost::thread_group& threadGroup, CScheduler& scheduler)
|
||||||
// Option to startup with mocktime set (used for regression testing):
|
// Option to startup with mocktime set (used for regression testing):
|
||||||
SetMockTime(GetArg("-mocktime", 0)); // SetMockTime(0) is a no-op
|
SetMockTime(GetArg("-mocktime", 0)); // SetMockTime(0) is a no-op
|
||||||
|
|
||||||
|
if (GetBoolArg("-peerbloomfilters", true))
|
||||||
|
nLocalServices |= NODE_BLOOM;
|
||||||
|
|
||||||
#ifdef ENABLE_MINING
|
#ifdef ENABLE_MINING
|
||||||
if (mapArgs.count("-mineraddress")) {
|
if (mapArgs.count("-mineraddress")) {
|
||||||
CBitcoinAddress addr;
|
CBitcoinAddress addr;
|
||||||
|
|
15
src/main.cpp
15
src/main.cpp
|
@ -5498,6 +5498,21 @@ bool static ProcessMessage(CNode* pfrom, string strCommand, CDataStream& vRecv,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
else if (!(nLocalServices & NODE_BLOOM) &&
|
||||||
|
(strCommand == "filterload" ||
|
||||||
|
strCommand == "filteradd" ||
|
||||||
|
strCommand == "filterclear") &&
|
||||||
|
//TODO: Remove this line after reasonable network upgrade
|
||||||
|
pfrom->nVersion >= NO_BLOOM_VERSION)
|
||||||
|
{
|
||||||
|
if (pfrom->nVersion >= NO_BLOOM_VERSION)
|
||||||
|
Misbehaving(pfrom->GetId(), 100);
|
||||||
|
//TODO: Enable this after reasonable network upgrade
|
||||||
|
//else
|
||||||
|
// pfrom->fDisconnect = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
else if (strCommand == "filterload")
|
else if (strCommand == "filterload")
|
||||||
{
|
{
|
||||||
CBloomFilter filter;
|
CBloomFilter filter;
|
||||||
|
|
|
@ -71,6 +71,10 @@ enum {
|
||||||
// set by all Bitcoin Core nodes, and is unset by SPV clients or other peers that just want
|
// set by all Bitcoin Core nodes, and is unset by SPV clients or other peers that just want
|
||||||
// network services but don't provide them.
|
// network services but don't provide them.
|
||||||
NODE_NETWORK = (1 << 0),
|
NODE_NETWORK = (1 << 0),
|
||||||
|
// NODE_BLOOM means the node is capable and willing to handle bloom-filtered connections.
|
||||||
|
// Zcash nodes used to support this by default, without advertising this bit,
|
||||||
|
// but no longer do as of protocol version 170004 (= NO_BLOOM_VERSION)
|
||||||
|
NODE_BLOOM = (1 << 2),
|
||||||
|
|
||||||
// Bits 24-31 are reserved for temporary experiments. Just pick a bit that
|
// Bits 24-31 are reserved for temporary experiments. Just pick a bit that
|
||||||
// isn't getting used, or one not being used much, and notify the
|
// isn't getting used, or one not being used much, and notify the
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
* network protocol versioning
|
* network protocol versioning
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static const int PROTOCOL_VERSION = 170003;
|
static const int PROTOCOL_VERSION = 170004;
|
||||||
|
|
||||||
//! 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;
|
||||||
|
@ -30,4 +30,7 @@ static const int BIP0031_VERSION = 60000;
|
||||||
//! "mempool" command, enhanced "getdata" behavior starts with this version
|
//! "mempool" command, enhanced "getdata" behavior starts with this version
|
||||||
static const int MEMPOOL_GD_VERSION = 60002;
|
static const int MEMPOOL_GD_VERSION = 60002;
|
||||||
|
|
||||||
|
//! "filter*" commands are disabled without NODE_BLOOM after and including this version
|
||||||
|
static const int NO_BLOOM_VERSION = 170004;
|
||||||
|
|
||||||
#endif // BITCOIN_VERSION_H
|
#endif // BITCOIN_VERSION_H
|
||||||
|
|
Loading…
Reference in New Issue