6 #ifndef PIVX_LLMQ_QUORUMS_DKGSESSION_H
7 #define PIVX_LLMQ_QUORUMS_DKGSESSION_H
22 class CFinalCommitment;
24 class CDKGSessionManager;
25 class CDKGPendingMessages;
31 CDKGLogger(
const std::string& _llmqTypeName,
const uint256& _quorumHash,
int _height,
bool _areWeMember,
const std::string& _func);
41 std::shared_ptr<CBLSIESMultiRecipientObjects<CBLSSecretKey>>
contributions;
45 template<
typename Stream>
54 template<
typename Stream>
60 template<
typename Stream>
73 vvec = std::make_shared<BLSVerificationVector>(std::move(tmp1));
74 contributions = std::make_shared<CBLSIESMultiRecipientObjects<CBLSSecretKey>>(std::move(tmp2));
245 std::vector<std::unique_ptr<CDKGMember>>
members;
281 bool Init(
const CBlockIndex* _pindexQuorum,
const std::vector<CDeterministicMNCPtr>& mns,
const uint256& _myProTxHash);
std::vector< CBLSId > BLSIdVector
std::vector< CBLSPublicKey > BLSVerificationVector
std::shared_ptr< BLSVerificationVector > BLSVerificationVectorPtr
std::vector< CBLSSecretKey > BLSSecretKeyVector
The block chain is a tree shaped structure starting with the genesis block at the root,...
A writer stream (for serialization) that computes a 256-bit hash.
uint256 GetSignHash() const
std::vector< bool > badMembers
SERIALIZE_METHODS(CDKGComplaint, obj)
std::vector< bool > complainForMembers
void Serialize(Stream &s) const
std::shared_ptr< CBLSIESMultiRecipientObjects< CBLSSecretKey > > contributions
uint256 GetSignHash() const
BLSVerificationVectorPtr vvec
void Unserialize(Stream &s)
void SerializeWithoutSig(Stream &s) const
std::vector< std::pair< uint32_t, CBLSSecretKey > > contributions
uint256 GetSignHash() const
SERIALIZE_METHODS(CDKGJustification, obj)
CDKGLogger(const CDKGSession &_quorumDkg, const std::string &_func)
std::set< uint256 > complaints
std::set< uint256 > complaintsFromOthers
std::set< uint256 > prematureCommitments
std::set< uint256 > justifications
std::set< uint256 > contributions
std::set< uint256 > badMemberVotes
CDKGMember(CDeterministicMNCPtr _dmn, size_t _idx)
Acts as a FIFO queue for incoming DKG messages.
std::vector< bool > validMembers
uint256 GetSignHash() const
SERIALIZE_METHODS(CDKGPrematureCommitment, obj)
CBLSPublicKey quorumPublicKey
int CountValidMembers() const
CDKGPrematureCommitment()
Handles multiple sequential sessions of one specific LLMQ type.
The DKG session is a single instance of the DKG process.
std::map< uint256, CDKGContribution > contributions
void VerifyAndJustify(CDKGPendingMessages &pendingMessages)
std::map< uint256, CDKGPrematureCommitment > prematureCommitments
std::map< uint256, size_t > membersMap
BLSSecretKeyVector receivedSkContributions
std::set< uint256 > seenMessages
std::vector< std::unique_ptr< CDKGMember > > members
CDKGSession(const Consensus::LLMQParams &_params, CBLSWorker &_blsWorker, CDKGSessionManager &_dkgManager)
void SendJustification(CDKGPendingMessages &pendingMessages, const std::set< uint256 > &forMembers)
void VerifyAndCommit(CDKGPendingMessages &pendingMessages)
std::map< uint256, CDKGJustification > justifications
std::set< uint256 > relayMembers
bool ShouldSimulateError(const std::string &error_type)
CDKGSessionManager & dkgManager
bool PreVerifyMessage(const CDKGContribution &qc, bool &retBan) const
void ReceiveMessage(const uint256 &hash, const CDKGContribution &qc, bool &retBan)
std::map< uint256, CDKGComplaint > complaints
std::vector< CFinalCommitment > FinalizeCommitments()
void Contribute(CDKGPendingMessages &pendingMessages)
The following sets of methods are for the first 4 phases handled in the session.
std::set< uint256 > validCommitments
const Consensus::LLMQParams & params
void MarkBadMember(CDKGMember *member)
void SendCommitment(CDKGPendingMessages &pendingMessages)
const CBlockIndex * pindexQuorum
friend class CDKGMessageHandler
void SendContributions(CDKGPendingMessages &pendingMessages)
std::vector< BLSVerificationVectorPtr > receivedVvecs
void VerifyAndComplain(CDKGPendingMessages &pendingMessages)
CDKGMember * GetMember(const uint256 &proTxHash) const
BLSSecretKeyVector skContributions
size_t GetMyMemberIndex() const
void SendComplaint(CDKGPendingMessages &pendingMessages)
BLSVerificationVectorPtr vvecContribution
void VerifyPendingContributions()
void VerifyConnectionAndMinProtoVersions()
void RelayInvToParticipants(const CInv &inv) const
bool Init(const CBlockIndex *_pindexQuorum, const std::vector< CDeterministicMNCPtr > &mns, const uint256 &_myProTxHash)
std::vector< size_t > pendingContributionVerifications
std::shared_ptr< const CDeterministicMN > CDeterministicMNCPtr
uint256 SerializeHash(const T &obj, int nType=SER_GETHASH, int nVersion=PROTOCOL_VERSION)
Compute the 256-bit hash of an object's serialization.
uint256 BuildCommitmentHash(Consensus::LLMQType llmqType, const uint256 &blockHash, const std::vector< bool > &validMembers, const CBLSPublicKey &pubKey, const uint256 &vvecHash)
bool SetSimulatedDKGErrorRate(const std::string &error_type, double rate)