24namespace network::tarcap {
34 std::shared_ptr<final_chain::FinalChain> final_chain, std::shared_ptr<KeyManager> key_manager,
35 std::shared_ptr<SlashingManager> slashing_manager);
46 void setNetwork(std::weak_ptr<Network> network);
67 std::pair<bool, std::shared_ptr<PbftVote>>
isUniqueVote(
const std::shared_ptr<PbftVote>& vote)
const;
121 std::pair<bool, std::vector<std::shared_ptr<PbftVote>>>
checkRewardVotes(
const std::shared_ptr<PbftBlock>& pbft_block,
191 std::pair<bool, std::string>
validateVote(
const std::shared_ptr<PbftVote>& vote,
bool strict =
true)
const;
268 std::pair<bool, std::shared_ptr<PbftVote>>
insertUniqueVote(
const std::shared_ptr<PbftVote>& vote);
281 std::shared_ptr<DbStorage>
db_;
void resetRewardVotes(PbftPeriod period, PbftRound round, PbftStep step, const blk_hash_t &block_hash, Batch &batch)
Replace current reward votes with new period, round & block hash based on vote.
Definition vote_manager.cpp:580
std::optional< PbftRound > determineNewRound(PbftPeriod current_pbft_period, PbftRound current_pbft_round)
Check if there are enough next voting type votes to set PBFT to a forward round within period.
Definition vote_manager.cpp:541
std::shared_mutex reward_votes_info_mutex_
Definition vote_manager.hpp:302
bool addVerifiedVote(const std::shared_ptr< PbftVote > &vote)
Add a vote to the verified votes map.
Definition vote_manager.cpp:180
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition vote_manager.hpp:283
std::pair< bool, std::vector< std::shared_ptr< PbftVote > > > checkRewardVotes(const std::shared_ptr< PbftBlock > &pbft_block, bool copy_votes)
Check reward votes for specified pbft block.
Definition vote_manager.cpp:672
bool voteAlreadyValidated(const vote_hash_t &vote_hash) const
Definition vote_manager.cpp:961
std::optional< uint64_t > getPbftTwoTPlusOne(PbftPeriod pbft_period, PbftVoteTypes vote_type) const
Get 2t+1. 2t+1 is 2/3 of PBFT sortition threshold and plus 1 for a specific period.
Definition vote_manager.cpp:926
std::vector< vote_hash_t > extra_reward_votes_
Definition vote_manager.hpp:301
blk_hash_t reward_votes_block_hash_
Definition vote_manager.hpp:298
std::pair< bool, std::shared_ptr< PbftVote > > isUniqueVote(const std::shared_ptr< PbftVote > &vote) const
Definition vote_manager.cpp:370
VoteManager(const VoteManager &)=delete
std::vector< std::shared_ptr< PbftVote > > getVerifiedVotes() const
Get all verified votes.
Definition vote_manager.cpp:73
std::shared_ptr< DbStorage > db_
Definition vote_manager.hpp:281
const PbftConfig & kPbftConfig
Definition vote_manager.hpp:279
std::atomic< PbftPeriod > current_pbft_period_
Definition vote_manager.hpp:289
bool voteInVerifiedMap(std::shared_ptr< PbftVote > const &vote) const
Check if the vote has been in the verified votes map.
Definition vote_manager.cpp:344
std::shared_ptr< PbftVote > generateVote(const blk_hash_t &blockhash, PbftVoteTypes type, PbftPeriod period, PbftRound round, PbftStep step, const WalletConfig &wallet)
Generate a vote.
Definition vote_manager.cpp:867
void setNetwork(std::weak_ptr< Network > network)
Set network as a weak pointer.
Definition vote_manager.cpp:71
void clearOwnVerifiedVotes(Batch &write_batch)
Clear own verified votes.
Definition vote_manager.cpp:812
bool genAndValidateVrfSortition(PbftPeriod pbft_period, PbftRound pbft_round, const WalletConfig &wallet) const
Generates vrf sortition and calculates its weight.
Definition vote_manager.cpp:965
uint64_t getPbftSortitionThreshold(uint64_t total_dpos_votes_count, PbftVoteTypes vote_type) const
Get PBFT sortition threshold for specific period.
Definition vote_manager.cpp:817
std::shared_ptr< PbftChain > pbft_chain_
Definition vote_manager.hpp:282
std::vector< std::shared_ptr< PbftVote > > getOwnVerifiedVotes()
Definition vote_manager.cpp:810
std::shared_ptr< KeyManager > key_manager_
Definition vote_manager.hpp:284
std::shared_ptr< SlashingManager > slashing_manager_
Definition vote_manager.hpp:286
void saveOwnVerifiedVote(const std::shared_ptr< PbftVote > &vote)
Saves own verified vote into memory and db.
Definition vote_manager.cpp:805
std::shared_mutex verified_votes_access_
Definition vote_manager.hpp:295
VoteManager(VoteManager &&)=delete
std::pair< bool, std::shared_ptr< PbftVote > > insertUniqueVote(const std::shared_ptr< PbftVote > &vote)
Inserts unique vote.
Definition vote_manager.cpp:433
std::vector< std::shared_ptr< PbftVote > > getProposalVotes(PbftPeriod period, PbftRound round) const
Get all verified votes in proposal vote type for the current PBFT round.
Definition vote_manager.cpp:512
void setCurrentPbftPeriodAndRound(PbftPeriod pbft_period, PbftRound pbft_round)
Sets current pbft period & round. It also checks if we dont already have 2t+1 vote bundles(pf any typ...
Definition vote_manager.cpp:110
std::unordered_map< PbftVoteTypes, std::pair< PbftPeriod, uint64_t > > current_two_t_plus_one_
Definition vote_manager.hpp:310
std::weak_ptr< Network > network_
Definition vote_manager.hpp:285
std::vector< std::shared_ptr< PbftVote > > own_verified_votes_
Definition vote_manager.hpp:305
std::atomic< PbftRound > current_pbft_round_
Definition vote_manager.hpp:291
ExpirationCache< vote_hash_t > already_validated_votes_
Definition vote_manager.hpp:315
logger::Logger logger_
Definition vote_manager.hpp:317
VoteManager & operator=(const VoteManager &)=delete
std::vector< std::shared_ptr< PbftVote > > getRewardVotes()
Get reward votes with the round during which was the previous block pushed.
Definition vote_manager.cpp:779
std::vector< std::shared_ptr< PbftVote > > getTwoTPlusOneVotedBlockVotes(PbftPeriod period, PbftRound round, TwoTPlusOneVotedBlockType type) const
Definition vote_manager.cpp:1020
std::shared_ptr< PbftVote > generateVoteWithWeight(const blk_hash_t &blockhash, PbftVoteTypes vote_type, PbftPeriod period, PbftRound round, PbftStep step, const WalletConfig &wallet)
Place a vote, save it in the verified votes queue, and gossip to peers.
Definition vote_manager.cpp:829
uint64_t getVerifiedVotesSize() const
Get the total size of all verified votes.
Definition vote_manager.cpp:93
std::pair< bool, std::string > validateVote(const std::shared_ptr< PbftVote > &vote, bool strict=true) const
Validates vote.
Definition vote_manager.cpp:874
PbftStep getNetworkTplusOneNextVotingStep(PbftPeriod period, PbftRound round) const
Returns greatest step (in specified period & round), for which there is at least t+1 voting power fro...
Definition vote_manager.cpp:164
std::map< PbftPeriod, std::map< PbftRound, VerifiedVotes > > verified_votes_
Definition vote_manager.hpp:294
PbftPeriod getRewardVotesPbftBlockPeriod()
Get current reward votes pbft block period.
Definition vote_manager.cpp:575
PbftRound reward_votes_round_
Definition vote_manager.hpp:300
bool isValidRewardVote(const std::shared_ptr< PbftVote > &vote) const
Definition vote_manager.cpp:641
std::optional< blk_hash_t > getTwoTPlusOneVotedBlock(PbftPeriod period, PbftRound round, TwoTPlusOneVotedBlockType type) const
Get 2t+1 voted block for specific period, round and type, e.g. soft/cert/next voted block.
Definition vote_manager.cpp:998
PbftRound reward_votes_period_
Definition vote_manager.hpp:299
VoteManager & operator=(VoteManager &&)=delete
std::shared_mutex current_two_t_plus_one_mutex_
Definition vote_manager.hpp:311
void cleanupVotesByPeriod(PbftPeriod pbft_period)
Cleanup votes for previous PBFT periods.
Definition vote_manager.cpp:503
VoteManager class manage votes for PBFT consensus.
Definition vote_manager.hpp:31
PbftVoteTypes
Definition vrf_sortition.hpp:21
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
rocksdb::WriteBatch Batch
Definition storage.hpp:70
uint32_t PbftStep
Definition types.hpp:27
uint32_t PbftRound
Definition types.hpp:26
EthBlockNumber PbftPeriod
Definition types.hpp:25
TwoTPlusOneVotedBlockType
Definition verified_votes.hpp:11
Definition pbft_config.hpp:9