diff --git a/src/avalanche/peermanager.h b/src/avalanche/peermanager.h --- a/src/avalanche/peermanager.h +++ b/src/avalanche/peermanager.h @@ -214,6 +214,8 @@ private: PeerSet::iterator fetchOrCreatePeer(const std::shared_ptr &proof); + bool addOrUpdateNode(const PeerSet::iterator &it, NodeId nodeid, + CPubKey pubkey); bool addNodeToPeer(const PeerSet::iterator &it); bool removeNodeFromPeer(const PeerSet::iterator &it, uint32_t count = 1); }; diff --git a/src/avalanche/peermanager.cpp b/src/avalanche/peermanager.cpp --- a/src/avalanche/peermanager.cpp +++ b/src/avalanche/peermanager.cpp @@ -26,14 +26,21 @@ return false; } - const PeerId peerid = it->peerid; - DelegationState state; CPubKey pubkey; if (!delegation.verify(state, pubkey)) { return false; } + return addOrUpdateNode(it, nodeid, std::move(pubkey)); +} + +bool PeerManager::addOrUpdateNode(const PeerSet::iterator &it, NodeId nodeid, + CPubKey pubkey) { + assert(it != peers.end()); + + const PeerId peerid = it->peerid; + auto nit = nodes.find(nodeid); if (nit == nodes.end()) { if (!nodes.emplace(nodeid, peerid, std::move(pubkey)).second) {