|
|
|
@ -861,7 +861,7 @@ void PeerManagerImpl::MaybeSetPeerAsAnnouncingHeaderAndIDs(NodeId nodeid)
|
|
|
|
|
}
|
|
|
|
|
m_connman.ForNode(nodeid, [this](CNode* pfrom) EXCLUSIVE_LOCKS_REQUIRED(::cs_main) {
|
|
|
|
|
AssertLockHeld(::cs_main);
|
|
|
|
|
uint64_t nCMPCTBLOCKVersion = (pfrom->GetLocalServices() & NODE_WITNESS) ? 2 : 1;
|
|
|
|
|
uint64_t nCMPCTBLOCKVersion = 2;
|
|
|
|
|
if (lNodesAnnouncingHeaderAndIDs.size() >= 3) {
|
|
|
|
|
// As per BIP152, we only get 3 of our peers to announce
|
|
|
|
|
// blocks using compact encodings.
|
|
|
|
@ -1955,7 +1955,7 @@ void PeerManagerImpl::ProcessGetData(CNode& pfrom, Peer& peer, const std::atomic
|
|
|
|
|
|
|
|
|
|
static uint32_t GetFetchFlags(const CNode& pfrom) EXCLUSIVE_LOCKS_REQUIRED(cs_main) {
|
|
|
|
|
uint32_t nFetchFlags = 0;
|
|
|
|
|
if ((pfrom.GetLocalServices() & NODE_WITNESS) && State(pfrom.GetId())->fHaveWitness) {
|
|
|
|
|
if (State(pfrom.GetId())->fHaveWitness) {
|
|
|
|
|
nFetchFlags |= MSG_WITNESS_FLAG;
|
|
|
|
|
}
|
|
|
|
|
return nFetchFlags;
|
|
|
|
@ -2667,8 +2667,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|
|
|
|
// they may wish to request compact blocks from us
|
|
|
|
|
bool fAnnounceUsingCMPCTBLOCK = false;
|
|
|
|
|
uint64_t nCMPCTBLOCKVersion = 2;
|
|
|
|
|
if (pfrom.GetLocalServices() & NODE_WITNESS)
|
|
|
|
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
|
|
|
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
|
|
|
|
nCMPCTBLOCKVersion = 1;
|
|
|
|
|
m_connman.PushMessage(&pfrom, msgMaker.Make(NetMsgType::SENDCMPCT, fAnnounceUsingCMPCTBLOCK, nCMPCTBLOCKVersion));
|
|
|
|
|
}
|
|
|
|
@ -2686,7 +2685,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|
|
|
|
bool fAnnounceUsingCMPCTBLOCK = false;
|
|
|
|
|
uint64_t nCMPCTBLOCKVersion = 0;
|
|
|
|
|
vRecv >> fAnnounceUsingCMPCTBLOCK >> nCMPCTBLOCKVersion;
|
|
|
|
|
if (nCMPCTBLOCKVersion == 1 || ((pfrom.GetLocalServices() & NODE_WITNESS) && nCMPCTBLOCKVersion == 2)) {
|
|
|
|
|
if (nCMPCTBLOCKVersion == 1 || nCMPCTBLOCKVersion == 2) {
|
|
|
|
|
LOCK(cs_main);
|
|
|
|
|
// fProvidesHeaderAndIDs is used to "lock in" version of compact blocks we send (fWantsCmpctWitness)
|
|
|
|
|
if (!State(pfrom.GetId())->fProvidesHeaderAndIDs) {
|
|
|
|
@ -2700,10 +2699,7 @@ void PeerManagerImpl::ProcessMessage(CNode& pfrom, const std::string& msg_type,
|
|
|
|
|
pfrom.m_bip152_highbandwidth_from = fAnnounceUsingCMPCTBLOCK;
|
|
|
|
|
}
|
|
|
|
|
if (!State(pfrom.GetId())->fSupportsDesiredCmpctVersion) {
|
|
|
|
|
if (pfrom.GetLocalServices() & NODE_WITNESS)
|
|
|
|
|
State(pfrom.GetId())->fSupportsDesiredCmpctVersion = (nCMPCTBLOCKVersion == 2);
|
|
|
|
|
else
|
|
|
|
|
State(pfrom.GetId())->fSupportsDesiredCmpctVersion = (nCMPCTBLOCKVersion == 1);
|
|
|
|
|
State(pfrom.GetId())->fSupportsDesiredCmpctVersion = (nCMPCTBLOCKVersion == 2);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return;
|
|
|
|
|