TARAXA
Loading...
Searching...
No Matches
pbft_manager.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <thread>
4
5#include "common/types.hpp"
6#include "config/config.hpp"
8#include "logger/logger.hpp"
9#include "network/network.hpp"
12
13namespace taraxa {
14
19namespace pillar_chain {
20class PillarChainManager;
21}
22
23class FullNode;
24class VoteManager;
25
28
59 public:
61 public:
62 EligibleWallets(const std::vector<WalletConfig> &wallets);
63 void updateWalletsEligibility(PbftPeriod period, const std::shared_ptr<final_chain::FinalChain> &final_chain);
64 const std::vector<std::pair<bool, WalletConfig>> &getWallets(PbftPeriod current_pbft_period) const;
65
66 /*
67 * @return period, for which wallets eligibility was updated
68 */
70
71 private:
72 // Period, for which wallets eligibility is set
74 std::vector<std::pair<bool /* dpos eligibility flag */, WalletConfig>> wallets_;
75 };
76
78 std::shared_ptr<PbftBlock> pbft_block;
79 std::vector<std::shared_ptr<PbftVote>> reward_votes;
80 std::shared_ptr<PbftVote> vote;
81 };
82
83 using time_point = std::chrono::system_clock::time_point;
84
85 public:
86 PbftManager(const FullNodeConfig &conf, std::shared_ptr<DbStorage> db, std::shared_ptr<PbftChain> pbft_chain,
87 std::shared_ptr<VoteManager> vote_mgr, std::shared_ptr<DagManager> dag_mgr,
88 std::shared_ptr<TransactionManager> trx_mgr, std::shared_ptr<final_chain::FinalChain> final_chain,
89 std::shared_ptr<pillar_chain::PillarChainManager> pillar_chain_mgr);
91 PbftManager(const PbftManager &) = delete;
93 PbftManager &operator=(const PbftManager &) = delete;
95
100 void setNetwork(std::weak_ptr<Network> network);
101
105 void start();
106
110 void stop();
111
115 void run();
116
120 void initialState();
121
127 std::pair<bool, PbftPeriod> getDagBlockPeriod(const blk_hash_t &hash);
128
134
139 PbftRound getPbftRound() const;
140
145 // TODO: exchange round <-> period
146 std::pair<PbftRound, PbftPeriod> getPbftRoundAndPeriod() const;
147
152 PbftStep getPbftStep() const;
153
158 void setPbftRound(PbftRound round);
159
164 void setPbftStep(PbftStep pbft_step);
165
176 std::optional<ProposedBlockData> generatePbftBlock(PbftPeriod propose_period, const blk_hash_t &prev_blk_hash,
177 const blk_hash_t &anchor_hash, const blk_hash_t &order_hash,
178 const std::optional<PbftBlockExtraData> &extra_data,
179 const std::vector<WalletConfig> &eligible_wallets);
180
186 std::optional<uint64_t> getCurrentDposTotalVotesCount() const;
187
193 std::optional<uint64_t> getCurrentNodeVotesCount() const;
194
200
205 size_t periodDataQueueSize() const;
206
211 bool periodDataQueueEmpty() const;
212
219 void periodDataQueuePush(PeriodData &&period_data, dev::p2p::NodeID const &node_id,
220 std::vector<std::shared_ptr<PbftVote>> &&current_block_cert_votes);
221
227
232 std::chrono::milliseconds getPbftInitialLambda() const { return kMinLambda; }
233
239 static blk_hash_t calculateOrderHash(const std::vector<blk_hash_t> &dag_block_hashes);
240
246 static blk_hash_t calculateOrderHash(const std::vector<std::shared_ptr<DagBlock>> &dag_blocks);
247
253 static void reorderTransactions(SharedTransactions &transactions);
254
261 bool checkBlockWeight(const std::vector<std::shared_ptr<DagBlock>> &dag_blocks, PbftPeriod period) const;
262
264
270 void processProposedBlock(const std::shared_ptr<PbftBlock> &proposed_block);
271
278 std::shared_ptr<PbftBlock> getPbftProposedBlock(PbftPeriod period, const blk_hash_t &block_hash) const;
279
285
290
295
296 // DPOS
301
310 bool validatePillarDataInPeriodData(const PeriodData &period_data) const;
311
318 void gossipVote(const std::shared_ptr<PbftVote> &vote, const std::shared_ptr<PbftBlock> &voted_block);
319
325 bool canParticipateInConsensus(PbftPeriod period, const addr_t &node_addr) const;
326
330 std::map<PbftPeriod, std::vector<std::shared_ptr<PbftBlock>>> getProposedBlocks() const;
331
332 private:
336 void broadcastVotes();
337
341 void resetStep();
342
347 bool advanceRound();
348
353 bool advancePeriod();
354
360
365 void resetPbftConsensus(PbftRound round);
366
371 std::chrono::milliseconds elapsedTimeInMs(const time_point &start_time);
372
376 void sleep_();
377
381 void setFilterState_();
382
386 void setCertifyState_();
387
391 void setFinishState_();
392
397
402
408 bool stateOperations_();
409
413 void proposeBlock_();
414
419 void identifyBlock_();
420
425 void certifyBlock_();
426
431 void firstFinish_();
432
437 void secondFinish_();
438
450 bool genAndPlaceVote(PbftVoteTypes vote_type, PbftPeriod period, PbftRound round, PbftStep step,
451 const blk_hash_t &block_hash, std::shared_ptr<PbftBlock> pbft_block = nullptr);
452
460 bool genAndPlaceProposeVote(const std::shared_ptr<PbftBlock> &proposed_block,
461 std::vector<std::shared_ptr<PbftVote>> &&reward_votes);
462
469 void gossipNewVote(const std::shared_ptr<PbftVote> &vote, const std::shared_ptr<PbftBlock> &voted_block);
470
475 std::optional<ProposedBlockData> proposePbftBlock();
476
483 std::optional<PbftBlockExtraData> createPbftBlockExtraData(PbftPeriod pbft_period) const;
484
491 std::optional<std::pair<std::shared_ptr<PbftBlock>, std::shared_ptr<PbftVote>>> identifyLeaderBlock(
492 std::vector<std::shared_ptr<PbftVote>> &&propose_votes);
493
499 h256 getProposal(const std::shared_ptr<PbftVote> &vote) const;
500
510 bool validatePbftBlock(const std::shared_ptr<PbftBlock> &pbft_block) const;
511
517 PbftStateRootValidation validateFinalChainHash(const std::shared_ptr<PbftBlock> &pbft_block) const;
518
527 bool validatePbftBlockExtraData(const std::shared_ptr<PbftBlock> &pbft_block) const;
528
535 bool pushCertVotedPbftBlockIntoChain_(const std::shared_ptr<PbftBlock> &pbft_block,
536 std::vector<std::shared_ptr<PbftVote>> &&current_round_cert_votes);
537
544 void finalize_(PeriodData &&period_data, std::vector<h256> &&finalized_dag_blk_hashes,
545 bool synchronous_processing = false);
546
553 bool pushPbftBlock_(PeriodData &&period_data, std::vector<std::shared_ptr<PbftVote>> &&cert_votes);
554
563 std::shared_ptr<PbftBlock> getValidPbftProposedBlock(PbftPeriod period, const blk_hash_t &block_hash);
564
569 std::optional<std::pair<PeriodData, std::vector<std::shared_ptr<PbftVote>>>> processPeriodData();
570
578 bool validatePbftBlockCertVotes(const std::shared_ptr<PbftBlock> pbft_block,
579 const std::vector<std::shared_ptr<PbftVote>> &cert_votes) const;
580
587 bool validatePbftBlockPillarVotes(const PeriodData &period_data) const;
588
592 void printVotingSummary() const;
593
599 void processPillarBlock(PbftPeriod period);
600
601 std::atomic<bool> stopped_ = true;
602
603 // Multiple proposed pbft blocks could have same dag block anchor at same period so this cache improves retrieval of
604 // dag block order for specific anchor
605 mutable std::unordered_map<blk_hash_t, std::vector<std::shared_ptr<DagBlock>>> anchor_dag_block_order_cache_;
606
607 std::unique_ptr<std::thread> daemon_;
608 std::shared_ptr<DbStorage> db_;
609 std::shared_ptr<PbftChain> pbft_chain_;
610 std::shared_ptr<VoteManager> vote_mgr_;
611 std::shared_ptr<DagManager> dag_mgr_;
612 std::weak_ptr<Network> network_;
613 std::shared_ptr<TransactionManager> trx_mgr_;
614 std::shared_ptr<final_chain::FinalChain> final_chain_;
615 std::shared_ptr<pillar_chain::PillarChainManager> pillar_chain_mgr_;
616
617 // TODO: remove kMinLambda, kGenesisConfig as kConfig can be used instead
620 std::shared_ptr<util::ThreadPool>
621 sync_thread_pool_; // Thread pool used for transaction sender retrieval in syncing blocks
622
623 const std::chrono::milliseconds kMinLambda; // [ms]
624 std::chrono::milliseconds lambda_{0}; // [ms]
625 const std::chrono::milliseconds kMaxLambda{60000}; // in ms, max lambda is 1 minutes
626
627 const uint32_t kBroadcastVotesLambdaTime = 20;
628 const uint32_t kRebroadcastVotesLambdaTime = 60;
633
635 std::atomic<PbftRound> round_ = 1;
637
638 // Block that node cert voted
639 std::optional<std::shared_ptr<PbftBlock>> cert_voted_block_for_round_{};
640
641 // All broadcasted votes created by a node in current round - just for summary logging purposes
642 std::map<blk_hash_t, std::vector<PbftStep>> current_round_broadcasted_votes_;
643
647 std::chrono::milliseconds next_step_time_ms_{0};
648
652 bool go_finish_state_ = false;
655
656 // Used to avoid cyclic logging in voting steps that are called repeatedly
659
661
663
664 std::condition_variable stop_cv_;
665 std::mutex stop_mtx_;
666
668
669 // Proposed blocks based on received propose votes
671
672 // Wallets with flag if they are/are not dpos eligible for specified period
674
676};
677
680} // namespace taraxa
Definition pbft_manager.hpp:60
std::vector< std::pair< bool, WalletConfig > > wallets_
Definition pbft_manager.hpp:74
const std::vector< std::pair< bool, WalletConfig > > & getWallets(PbftPeriod current_pbft_period) const
Definition pbft_manager.cpp:2329
PbftPeriod period_
Definition pbft_manager.hpp:73
void updateWalletsEligibility(PbftPeriod period, const std::shared_ptr< final_chain::FinalChain > &final_chain)
Definition pbft_manager.cpp:2317
PbftPeriod getWalletsEligiblePeriod() const
Definition pbft_manager.cpp:2336
class ProposedBlocks holds proposed pbft blocks together with propose votes hashes per period & round
Definition proposed_blocks.hpp:18
std::optional< ProposedBlockData > generatePbftBlock(PbftPeriod propose_period, const blk_hash_t &prev_blk_hash, const blk_hash_t &anchor_hash, const blk_hash_t &order_hash, const std::optional< PbftBlockExtraData > &extra_data, const std::vector< WalletConfig > &eligible_wallets)
Generate PBFT block, push into unverified queue, and broadcast to peers.
Definition pbft_manager.cpp:1166
std::vector< std::shared_ptr< PbftVote > > reward_votes
Definition pbft_manager.hpp:79
std::chrono::system_clock::time_point time_point
Definition pbft_manager.hpp:83
uint32_t rebroadcast_reward_votes_counter_
Definition pbft_manager.hpp:632
std::shared_ptr< pillar_chain::PillarChainManager > pillar_chain_mgr_
Definition pbft_manager.hpp:615
void secondFinish_()
PBFT finish polling state: Happens at odd number steps from step 5. Place a next vote at finishing va...
Definition pbft_manager.cpp:1098
std::atomic< PbftRound > round_
Definition pbft_manager.hpp:635
void testBroadcastVotesFunctionality()
Test/enforce broadcastVotes() to actually send votes.
Definition pbft_manager.cpp:682
const std::chrono::milliseconds kMinLambda
Definition pbft_manager.hpp:623
void processProposedBlock(const std::shared_ptr< PbftBlock > &proposed_block)
Push proposed block into the proposed_blocks_ in case it is not there yet.
Definition pbft_manager.cpp:1237
std::shared_ptr< PbftChain > pbft_chain_
Definition pbft_manager.hpp:609
void setPbftStep(PbftStep pbft_step)
Set PBFT step.
Definition pbft_manager.cpp:274
const blk_hash_t dag_genesis_block_hash_
Definition pbft_manager.hpp:660
std::shared_ptr< PbftBlock > getValidPbftProposedBlock(PbftPeriod period, const blk_hash_t &block_hash)
Get valid proposed pbft block. It will retrieve block from proposed_blocks and then validate it if no...
Definition pbft_manager.cpp:752
bool executed_pbft_block_
Definition pbft_manager.hpp:649
void start()
Start PBFT daemon.
Definition pbft_manager.cpp:108
void setFilterState_()
Set PBFT filter state.
Definition pbft_manager.cpp:549
std::shared_ptr< PbftVote > vote
Definition pbft_manager.hpp:80
std::chrono::milliseconds getPbftInitialLambda() const
Get PBFT lambda. PBFT lambda is a timer clock.
Definition pbft_manager.hpp:232
uint32_t rebroadcast_votes_counter_
Definition pbft_manager.hpp:630
EligibleWallets eligible_wallets_
Definition pbft_manager.hpp:673
std::shared_ptr< TransactionManager > trx_mgr_
Definition pbft_manager.hpp:613
bool already_next_voted_null_block_hash_
Definition pbft_manager.hpp:651
std::shared_ptr< util::ThreadPool > sync_thread_pool_
Definition pbft_manager.hpp:621
void setFinishState_()
Set PBFT finish state.
Definition pbft_manager.cpp:562
std::pair< bool, PbftPeriod > getDagBlockPeriod(const blk_hash_t &hash)
Get a DAG block period number.
Definition pbft_manager.cpp:189
void sleep_()
Time to sleep for PBFT protocol.
Definition pbft_manager.cpp:446
static blk_hash_t calculateOrderHash(const std::vector< blk_hash_t > &dag_block_hashes)
Calculate DAG blocks ordering hash.
Definition pbft_manager.cpp:1245
~PbftManager()
Definition pbft_manager.cpp:104
const uint32_t kSyncingThreadPoolSize
Definition pbft_manager.hpp:619
size_t periodDataQueueSize() const
Get PBFT blocks syncing queue size.
Definition pbft_manager.cpp:2286
bool go_finish_state_
Definition pbft_manager.hpp:652
void setNetwork(std::weak_ptr< Network > network)
Set network as a weak pointer.
Definition pbft_manager.cpp:106
void setCertifyState_()
Set PBFT certify state.
Definition pbft_manager.cpp:555
PbftPeriod pbftSyncingPeriod() const
Get PBFT blocks synced period.
Definition pbft_manager.cpp:1946
size_t getPbftCommitteeSize() const
Get PBFT committee size.
Definition pbft_manager.hpp:284
bool pushCertVotedPbftBlockIntoChain_(const std::shared_ptr< PbftBlock > &pbft_block, std::vector< std::shared_ptr< PbftVote > > &&current_round_cert_votes)
If there are enough certify votes, push the vote PBFT block in PBFT chain.
Definition pbft_manager.cpp:1670
bool advanceRound()
If node receives 2t+1 next votes for some block(including kNullBlockHash), advance round to + 1.
Definition pbft_manager.cpp:370
std::chrono::milliseconds lambda_
Definition pbft_manager.hpp:624
PbftStates state_
Definition pbft_manager.hpp:634
PbftStep getPbftStep() const
Get PBFT step number.
Definition pbft_manager.cpp:209
void identifyBlock_()
PBFT filter state. PBFT step 2. Identify a leader block from all received proposed blocks for the cur...
Definition pbft_manager.cpp:956
std::optional< uint64_t > getCurrentNodeVotesCount() const
Get current node DPOS votes count.
Definition pbft_manager.cpp:238
uint32_t broadcast_reward_votes_counter_
Definition pbft_manager.hpp:631
bool stateOperations_()
If there are any synced PBFT blocks from peers, push the synced blocks in PBFT chain....
Definition pbft_manager.cpp:711
time_point second_finish_step_start_datetime_
Definition pbft_manager.hpp:646
std::atomic< bool > stopped_
Definition pbft_manager.hpp:601
std::shared_ptr< DagManager > dag_mgr_
Definition pbft_manager.hpp:611
bool validatePbftBlockExtraData(const std::shared_ptr< PbftBlock > &pbft_block) const
Validates pbft block extra data presence:
Definition pbft_manager.cpp:1520
std::chrono::milliseconds next_step_time_ms_
Definition pbft_manager.hpp:647
h256 getProposal(const std::shared_ptr< PbftVote > &vote) const
Calculate the lowest hash of a vote by vote weight.
Definition pbft_manager.cpp:1444
uint32_t broadcast_votes_counter_
Definition pbft_manager.hpp:629
std::shared_ptr< PbftBlock > pbft_block
Definition pbft_manager.hpp:78
void printVotingSummary() const
Prints all votes generated by node in current round.
Definition pbft_manager.cpp:690
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition pbft_manager.hpp:614
PbftPeriod getPbftPeriod() const
Get current PBFT period number.
Definition pbft_manager.cpp:201
std::shared_ptr< PbftBlock > getPbftProposedBlock(PbftPeriod period, const blk_hash_t &block_hash) const
Get a proposed PBFT block based on specified period and block hash.
Definition pbft_manager.cpp:2301
const FullNodeConfig kConfig
Definition pbft_manager.hpp:618
void firstFinish_()
PBFT finish state. Happens at even number steps from step 4. Place a next vote at finishing value for...
Definition pbft_manager.cpp:1049
bool canParticipateInConsensus(PbftPeriod period, const addr_t &node_addr) const
Definition pbft_manager.cpp:2228
std::mutex stop_mtx_
Definition pbft_manager.hpp:665
bool validatePbftBlock(const std::shared_ptr< PbftBlock > &pbft_block) const
Validates pbft block. It checks if:
Definition pbft_manager.cpp:1576
std::optional< uint64_t > getCurrentDposTotalVotesCount() const
Get current total DPOS votes count.
Definition pbft_manager.cpp:226
void pushSyncedPbftBlocksIntoChain()
Check PBFT blocks syncing queue. If there are synced PBFT blocks in queue, push it to PBFT chain.
Definition pbft_manager.cpp:1706
void resetPbftConsensus(PbftRound round)
Resets pbft consensus: current pbft round is set to round, step is set to the beginning value.
Definition pbft_manager.cpp:388
PbftPeriod last_placed_pillar_vote_period_
Definition pbft_manager.hpp:654
void setPbftRound(PbftRound round)
Set PBFT round number.
Definition pbft_manager.cpp:211
const std::chrono::milliseconds kMaxLambda
Definition pbft_manager.hpp:625
std::unordered_map< blk_hash_t, std::vector< std::shared_ptr< DagBlock > > > anchor_dag_block_order_cache_
Definition pbft_manager.hpp:605
PeriodDataQueue sync_queue_
Definition pbft_manager.hpp:667
bool validatePbftBlockCertVotes(const std::shared_ptr< PbftBlock > pbft_block, const std::vector< std::shared_ptr< PbftVote > > &cert_votes) const
Validates PBFT block cert votes.
Definition pbft_manager.cpp:2082
PbftManager & operator=(const PbftManager &)=delete
blk_hash_t getLastPbftBlockHash()
Definition pbft_manager.cpp:2299
std::chrono::milliseconds elapsedTimeInMs(const time_point &start_time)
Definition pbft_manager.cpp:442
void gossipNewVote(const std::shared_ptr< PbftVote > &vote, const std::shared_ptr< PbftBlock > &voted_block)
Gossips newly generated vote to the other peers.
Definition pbft_manager.cpp:869
PbftStateRootValidation validateFinalChainHash(const std::shared_ptr< PbftBlock > &pbft_block) const
Validates pbft block final chain hash.
Definition pbft_manager.cpp:1502
bool checkBlockWeight(const std::vector< std::shared_ptr< DagBlock > > &dag_blocks, PbftPeriod period) const
Check a block weight of gas estimation.
Definition pbft_manager.cpp:2288
ProposedBlocks proposed_blocks_
Definition pbft_manager.hpp:670
std::optional< ProposedBlockData > proposePbftBlock()
Propose a new PBFT block.
Definition pbft_manager.cpp:1285
std::optional< PbftBlockExtraData > createPbftBlockExtraData(PbftPeriod pbft_period) const
Creates pbft block extra data.
Definition pbft_manager.cpp:1422
bool pushPbftBlock_(PeriodData &&period_data, std::vector< std::shared_ptr< PbftVote > > &&cert_votes)
Push a new PBFT block into the PBFT chain.
Definition pbft_manager.cpp:1806
void certifyBlock_()
PBFT certify state. PBFT step 3. If receive enough soft votes and pass verification,...
Definition pbft_manager.cpp:993
void resetStep()
Reset PBFT step to 1.
Definition pbft_manager.cpp:313
std::condition_variable stop_cv_
Definition pbft_manager.hpp:664
void setFinishPollingState_()
Set PBFT finish polling state.
Definition pbft_manager.cpp:569
const GenesisConfig & kGenesisConfig
Definition pbft_manager.hpp:662
void finalize_(PeriodData &&period_data, std::vector< h256 > &&finalized_dag_blk_hashes, bool synchronous_processing=false)
Final chain executes a finalized PBFT block.
Definition pbft_manager.cpp:1786
bool loop_back_finish_state_
Definition pbft_manager.hpp:653
bool printSecondFinishStepInfo_
Definition pbft_manager.hpp:657
static void reorderTransactions(SharedTransactions &transactions)
Reorder transactions data if DAG reordering caused transactions with same sender to have nonce in inc...
Definition pbft_manager.cpp:1733
void stop()
Stop PBFT daemon.
Definition pbft_manager.cpp:117
std::optional< std::pair< PeriodData, std::vector< std::shared_ptr< PbftVote > > > > processPeriodData()
Process synced PBFT blocks if PBFT syncing queue is not empty.
Definition pbft_manager.cpp:1950
PbftManager(const PbftManager &)=delete
bool periodDataQueueEmpty() const
Returns true if queue is empty.
Definition pbft_manager.cpp:2253
std::weak_ptr< Network > network_
Definition pbft_manager.hpp:612
time_point current_round_start_datetime_
Definition pbft_manager.hpp:644
void broadcastVotes()
Broadcast or rebroadcast 2t+1 soft/reward/previous round next votes + all own votes if needed.
Definition pbft_manager.cpp:595
bool already_next_voted_value_
Definition pbft_manager.hpp:650
bool validatePillarDataInPeriodData(const PeriodData &period_data) const
Validates pbft block extra data presence + pillar votes presence based on pbft block number and ficus...
Definition pbft_manager.cpp:1553
bool validatePbftBlockPillarVotes(const PeriodData &period_data) const
Validates PBFT block pillar votes.
Definition pbft_manager.cpp:2165
blk_hash_t lastPbftBlockHashFromQueueOrChain()
Get last pbft block hash from queue or if queue empty, from chain.
Definition pbft_manager.cpp:2245
bool genAndPlaceProposeVote(const std::shared_ptr< PbftBlock > &proposed_block, std::vector< std::shared_ptr< PbftVote > > &&reward_votes)
Generate propose vote for provided block place (gossip) it.
Definition pbft_manager.cpp:841
bool advancePeriod()
If node receives 2t+1 cert votes for some valid block and pushes it to the chain, advance period to +...
Definition pbft_manager.cpp:345
bool tryPushCertVotesBlock()
Check if there is 2t+1 cert votes for some valid block, if yes - push it into the chain.
Definition pbft_manager.cpp:318
std::map< blk_hash_t, std::vector< PbftStep > > current_round_broadcasted_votes_
Definition pbft_manager.hpp:642
std::map< PbftPeriod, std::vector< std::shared_ptr< PbftBlock > > > getProposedBlocks() const
Definition pbft_manager.cpp:2241
std::unique_ptr< std::thread > daemon_
Definition pbft_manager.hpp:607
void periodDataQueuePush(PeriodData &&period_data, dev::p2p::NodeID const &node_id, std::vector< std::shared_ptr< PbftVote > > &&current_block_cert_votes)
Push synced period data in syncing queue.
Definition pbft_manager.cpp:2255
bool genAndPlaceVote(PbftVoteTypes vote_type, PbftPeriod period, PbftRound round, PbftStep step, const blk_hash_t &block_hash, std::shared_ptr< PbftBlock > pbft_block=nullptr)
Generate and place(gossip) vote.
Definition pbft_manager.cpp:775
void initialState()
Initial PBFT states when node start PBFT.
Definition pbft_manager.cpp:463
const uint32_t kBroadcastVotesLambdaTime
Definition pbft_manager.hpp:627
void run()
Run PBFT daemon.
Definition pbft_manager.cpp:140
PbftRound getPbftRound() const
Get current PBFT round number.
Definition pbft_manager.cpp:203
PbftManager & operator=(PbftManager &&)=delete
std::pair< PbftRound, PbftPeriod > getPbftRoundAndPeriod() const
Get PBFT round & period number.
Definition pbft_manager.cpp:205
PbftStep step_
Definition pbft_manager.hpp:636
void waitForPeriodFinalization()
wait for DPOS period finalization
Definition pbft_manager.cpp:216
void proposeBlock_()
PBFT proposal state. PBFT step 1. Propose a PBFT block and place a proposal vote on the block hash.
Definition pbft_manager.cpp:893
PbftManager(PbftManager &&)=delete
void gossipVote(const std::shared_ptr< PbftVote > &vote, const std::shared_ptr< PbftBlock > &voted_block)
Gossips vote to the other peers.
Definition pbft_manager.cpp:880
void processPillarBlock(PbftPeriod period)
Creates pillar block (and pillar vote in case node is eligible to vote & is not syncing)
Definition pbft_manager.cpp:1911
std::shared_ptr< VoteManager > vote_mgr_
Definition pbft_manager.hpp:610
const uint32_t kRebroadcastVotesLambdaTime
Definition pbft_manager.hpp:628
std::optional< std::shared_ptr< PbftBlock > > cert_voted_block_for_round_
Definition pbft_manager.hpp:639
bool printCertStepInfo_
Definition pbft_manager.hpp:658
void loopBackFinishState_()
Set back to PBFT finish state from PBFT finish polling state.
Definition pbft_manager.cpp:583
std::optional< std::pair< std::shared_ptr< PbftBlock >, std::shared_ptr< PbftVote > > > identifyLeaderBlock(std::vector< std::shared_ptr< PbftVote > > &&propose_votes)
Identify a leader block from all received proposed PBFT blocks for the current round by using minimum...
Definition pbft_manager.cpp:1455
std::shared_ptr< DbStorage > db_
Definition pbft_manager.hpp:608
time_point current_period_start_datetime_
Definition pbft_manager.hpp:645
PbftManager class is a daemon that is used to finalize a bench of directed acyclic graph (DAG) blocks...
Definition pbft_manager.hpp:58
PeriodData class is for block execution, that includes PBFT block, certify votes, DAG blocks,...
Definition period_data.hpp:26
PeriodDataQueue class is a syncing queue, the queue stores blocks synced from peers.
Definition period_data_queue.hpp:20
PbftStateRootValidation
Definition pbft_manager.hpp:27
PbftStates
Definition pbft_manager.hpp:26
@ finish_state
Definition pbft_manager.hpp:26
@ certify_state
Definition pbft_manager.hpp:26
@ value_proposal_state
Definition pbft_manager.hpp:26
@ finish_polling_state
Definition pbft_manager.hpp:26
@ filter_state
Definition pbft_manager.hpp:26
Definition pbft_manager.hpp:77
PbftVoteTypes
Definition vrf_sortition.hpp:21
#define LOG_OBJECTS_DEFINE
Definition logger.hpp:60
Definition app.hpp:16
uint32_t PbftStep
Definition types.hpp:26
uint32_t PbftRound
Definition types.hpp:25
EthBlockNumber PbftPeriod
Definition types.hpp:24
std::vector< SharedTransaction > SharedTransactions
Definition transaction.hpp:86
Definition config.hpp:40
Definition genesis.hpp:23
PbftConfig pbft
Definition genesis.hpp:28
uint32_t committee_size
Definition pbft_config.hpp:11
Definition config.hpp:22