Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/processor.cpp
Show First 20 Lines • Show All 145 Lines • ▼ Show 20 Lines | class Processor::NotificationsHandler | ||||
Processor *m_processor; | Processor *m_processor; | ||||
public: | public: | ||||
NotificationsHandler(Processor *p) : m_processor(p) {} | NotificationsHandler(Processor *p) : m_processor(p) {} | ||||
void updatedBlockTip() override { | void updatedBlockTip() override { | ||||
LOCK(m_processor->cs_peerManager); | LOCK(m_processor->cs_peerManager); | ||||
if (m_processor->mustRegisterProof && | if (!::ChainstateActive().IsInitialBlockDownload()) { | ||||
!::ChainstateActive().IsInitialBlockDownload()) { | // Register our own proof | ||||
m_processor->peerManager->getPeerId(m_processor->peerData->proof); | if (m_processor->mustRegisterProof) { | ||||
m_processor->peerManager->getPeerId( | |||||
m_processor->peerData->proof); | |||||
m_processor->mustRegisterProof = false; | m_processor->mustRegisterProof = false; | ||||
} | } | ||||
// Register proofs for nodes met while doing IBD | |||||
const auto &nodes = m_processor->getNodesQueue(); | |||||
for (auto [nodeId, proofAndDelegation] : nodes) { | |||||
Proof proof = std::get<0>(proofAndDelegation); | |||||
Delegation delegation = std::get<1>(proofAndDelegation); | |||||
// Add the node to the avalanche peers. | |||||
bool success = g_avalanche->addNode(nodeId, proof, delegation); | |||||
if (success) { | |||||
LogPrint(BCLog::NET, "added avalanche node=%d\n", nodeId); | |||||
} else { | |||||
LogPrint(BCLog::NET, "failed to add avalanche node=%d\n", | |||||
nodeId); | |||||
} | |||||
} | |||||
m_processor->clearNodesQueue(); | |||||
} | |||||
m_processor->peerManager->updatedBlockTip(); | m_processor->peerManager->updatedBlockTip(); | ||||
} | } | ||||
}; | }; | ||||
Processor::Processor(interfaces::Chain &chain, CConnman *connmanIn, | Processor::Processor(interfaces::Chain &chain, CConnman *connmanIn, | ||||
NodePeerManager *nodePeerManagerIn) | NodePeerManager *nodePeerManagerIn) | ||||
: connman(connmanIn), nodePeerManager(nodePeerManagerIn), | : connman(connmanIn), nodePeerManager(nodePeerManagerIn), | ||||
queryTimeoutDuration(AVALANCHE_DEFAULT_QUERY_TIMEOUT), round(0), | queryTimeoutDuration(AVALANCHE_DEFAULT_QUERY_TIMEOUT), round(0), | ||||
▲ Show 20 Lines • Show All 223 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
bool Processor::forNode(NodeId nodeid, | bool Processor::forNode(NodeId nodeid, | ||||
std::function<bool(const Node &n)> func) const { | std::function<bool(const Node &n)> func) const { | ||||
LOCK(cs_peerManager); | LOCK(cs_peerManager); | ||||
return peerManager->forNode(nodeid, std::move(func)); | return peerManager->forNode(nodeid, std::move(func)); | ||||
} | } | ||||
bool Processor::queueNode(NodeId nodeId, Proof proof, Delegation delegation) { | |||||
const auto [it, success] = nodesQueue.insert({nodeId, {proof, delegation}}); | |||||
return success; | |||||
} | |||||
bool Processor::removeNodeFromQueue(NodeId nodeId) { | |||||
size_t n = nodesQueue.erase(nodeId); | |||||
return n == 1 ? true : false; | |||||
} | |||||
void Processor::clearNodesQueue() { | |||||
nodesQueue.clear(); | |||||
} | |||||
const std::map<NodeId, std::tuple<Proof, Delegation>> & | |||||
Processor::getNodesQueue() { | |||||
return nodesQueue; | |||||
} | |||||
CPubKey Processor::getSessionPubKey() const { | CPubKey Processor::getSessionPubKey() const { | ||||
return sessionKey.GetPubKey(); | return sessionKey.GetPubKey(); | ||||
} | } | ||||
uint256 Processor::buildLocalSighash(CNode *pfrom) const { | uint256 Processor::buildLocalSighash(CNode *pfrom) const { | ||||
CHashWriter hasher(SER_GETHASH, 0); | CHashWriter hasher(SER_GETHASH, 0); | ||||
hasher << peerData->delegation.getId(); | hasher << peerData->delegation.getId(); | ||||
hasher << pfrom->GetLocalNonce(); | hasher << pfrom->GetLocalNonce(); | ||||
▲ Show 20 Lines • Show All 218 Lines • Show Last 20 Lines |