Changeset View
Changeset View
Standalone View
Standalone View
src/avalanche/processor.cpp
Show First 20 Lines • Show All 167 Lines • ▼ Show 20 Lines | if (gArgs.IsArgSet("-avaproof")) { | ||||
{ | { | ||||
// The proof. | // The proof. | ||||
CDataStream stream(ParseHex(gArgs.GetArg("-avaproof", "")), | CDataStream stream(ParseHex(gArgs.GetArg("-avaproof", "")), | ||||
SER_NETWORK, 0); | SER_NETWORK, 0); | ||||
stream >> peerData->proof; | stream >> peerData->proof; | ||||
// Ensure the peer manager knows about it. | // Ensure the peer manager knows about it. | ||||
LOCK(cs_peerManager); | // FIXME: There is no way to register the proof at this time because | ||||
peerManager->getPeerId(peerData->proof); | // we might not have the proper chainstate at the moment. We need to | ||||
// find a way to delay the registration of the proof until after IBD | |||||
// has finished and the chain state is settled. | |||||
// LOCK(cs_peerManager); | |||||
// peerManager->getPeerId(peerData->proof); | |||||
} | } | ||||
// Generate the delegation to the session key. | // Generate the delegation to the session key. | ||||
DelegationBuilder dgb(peerData->proof); | DelegationBuilder dgb(peerData->proof); | ||||
if (sessionKey.GetPubKey() != peerData->proof.getMaster()) { | if (sessionKey.GetPubKey() != peerData->proof.getMaster()) { | ||||
dgb.addLevel(DecodeSecret(gArgs.GetArg("-avamasterkey", "")), | dgb.addLevel(DecodeSecret(gArgs.GetArg("-avamasterkey", "")), | ||||
sessionKey.GetPubKey()); | sessionKey.GetPubKey()); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 203 Lines • ▼ Show 20 Lines | bool Processor::forNode(NodeId nodeid, | ||||
LOCK(cs_peerManager); | LOCK(cs_peerManager); | ||||
return peerManager->forNode(nodeid, std::move(func)); | return peerManager->forNode(nodeid, std::move(func)); | ||||
} | } | ||||
CPubKey Processor::getSessionPubKey() const { | CPubKey Processor::getSessionPubKey() const { | ||||
return sessionKey.GetPubKey(); | return sessionKey.GetPubKey(); | ||||
} | } | ||||
bool Processor::sendHello(CNode *pfrom) const { | |||||
if (!peerData) { | |||||
// We do not have a delegation to advertise. | |||||
return false; | |||||
} | |||||
// Now let's sign! | |||||
std::array<uint8_t, 64> sig; | |||||
{ | |||||
CHashWriter hasher(SER_GETHASH, 0); | |||||
hasher << peerData->delegation.getId(); | |||||
hasher << pfrom->GetLocalNonce(); | |||||
hasher << pfrom->nRemoteHostNonce; | |||||
hasher << pfrom->GetLocalExtraEntropy(); | |||||
hasher << pfrom->nRemoteExtraEntropy; | |||||
const uint256 hash = hasher.GetHash(); | |||||
if (!sessionKey.SignSchnorr(hash, sig)) { | |||||
return false; | |||||
} | |||||
} | |||||
connman->PushMessage(pfrom, CNetMsgMaker(pfrom->GetSendVersion()) | |||||
.Make(NetMsgType::AVAHELLO, | |||||
Hello(peerData->delegation, sig))); | |||||
return true; | |||||
} | |||||
bool Processor::startEventLoop(CScheduler &scheduler) { | bool Processor::startEventLoop(CScheduler &scheduler) { | ||||
return eventLoop.startEventLoop( | return eventLoop.startEventLoop( | ||||
scheduler, [this]() { this->runEventLoop(); }, AVALANCHE_TIME_STEP); | scheduler, [this]() { this->runEventLoop(); }, AVALANCHE_TIME_STEP); | ||||
} | } | ||||
bool Processor::stopEventLoop() { | bool Processor::stopEventLoop() { | ||||
return eventLoop.stopEventLoop(); | return eventLoop.stopEventLoop(); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 153 Lines • Show Last 20 Lines |