TARAXA
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"
11 #include "pbft/proposed_blocks.hpp"
12 
13 namespace taraxa {
14 
19 class FullNode;
20 
23 
53 class PbftManager {
54  public:
56 
57  PbftManager(const FullNodeConfig &conf, std::shared_ptr<DbStorage> db, std::shared_ptr<PbftChain> pbft_chain,
58  std::shared_ptr<VoteManager> vote_mgr, std::shared_ptr<DagManager> dag_mgr,
59  std::shared_ptr<TransactionManager> trx_mgr, std::shared_ptr<final_chain::FinalChain> final_chain,
60  std::shared_ptr<pillar_chain::PillarChainManager> pillar_chain_mgr);
61  ~PbftManager();
62  PbftManager(const PbftManager &) = delete;
63  PbftManager(PbftManager &&) = delete;
64  PbftManager &operator=(const PbftManager &) = delete;
66 
71  void setNetwork(std::weak_ptr<Network> network);
72 
76  void start();
77 
81  void stop();
82 
86  void run();
87 
91  void initialState();
92 
98  std::pair<bool, PbftPeriod> getDagBlockPeriod(const blk_hash_t &hash);
99 
104  PbftPeriod getPbftPeriod() const;
105 
110  PbftRound getPbftRound() const;
111 
116  // TODO: exchange round <-> period
117  std::pair<PbftRound, PbftPeriod> getPbftRoundAndPeriod() const;
118 
123  PbftStep getPbftStep() const;
124 
129  void setPbftRound(PbftRound round);
130 
135  void setPbftStep(PbftStep pbft_step);
136 
146  std::optional<std::pair<std::shared_ptr<PbftBlock>, std::vector<std::shared_ptr<PbftVote>>>> generatePbftBlock(
147  PbftPeriod propose_period, const blk_hash_t &prev_blk_hash, const blk_hash_t &anchor_hash,
148  const blk_hash_t &order_hash, const std::optional<PbftBlockExtraData> &extra_data);
149 
155  std::optional<uint64_t> getCurrentDposTotalVotesCount() const;
156 
162  std::optional<uint64_t> getCurrentNodeVotesCount() const;
163 
169 
174  size_t periodDataQueueSize() const;
175 
180  bool periodDataQueueEmpty() const;
181 
188  void periodDataQueuePush(PeriodData &&period_data, dev::p2p::NodeID const &node_id,
189  std::vector<std::shared_ptr<PbftVote>> &&current_block_cert_votes);
190 
196 
201  std::chrono::milliseconds getPbftInitialLambda() const { return kMinLambda; }
202 
208  static blk_hash_t calculateOrderHash(const std::vector<blk_hash_t> &dag_block_hashes);
209 
215  static blk_hash_t calculateOrderHash(const std::vector<DagBlock> &dag_blocks);
216 
222  static void reorderTransactions(SharedTransactions &transactions);
223 
229  bool checkBlockWeight(const std::vector<DagBlock> &dag_blocks) const;
230 
232 
239  void processProposedBlock(const std::shared_ptr<PbftBlock> &proposed_block,
240  const std::shared_ptr<PbftVote> &propose_vote);
241 
248  std::shared_ptr<PbftBlock> getPbftProposedBlock(PbftPeriod period, const blk_hash_t &block_hash) const;
249 
255 
260 
265 
266  // DPOS
271 
280  bool validatePillarDataInPeriodData(const PeriodData &period_data) const;
281 
288  void gossipVote(const std::shared_ptr<PbftVote> &vote, const std::shared_ptr<PbftBlock> &voted_block);
289 
290  private:
294  void broadcastVotes();
295 
299  void resetStep();
300 
305  bool advanceRound();
306 
311  bool advancePeriod();
312 
317  bool tryPushCertVotesBlock();
318 
323  void resetPbftConsensus(PbftRound round);
324 
329  std::chrono::milliseconds elapsedTimeInMs(const time_point &start_time);
330 
334  void sleep_();
335 
339  void setFilterState_();
340 
344  void setCertifyState_();
345 
349  void setFinishState_();
350 
354  void setFinishPollingState_();
355 
359  void loopBackFinishState_();
360 
366  bool stateOperations_();
367 
371  void proposeBlock_();
372 
377  void identifyBlock_();
378 
383  void certifyBlock_();
384 
389  void firstFinish_();
390 
395  void secondFinish_();
396 
404  bool placeVote(const std::shared_ptr<PbftVote> &vote, std::string_view log_vote_id,
405  const std::shared_ptr<PbftBlock> &voted_block);
406 
414  bool genAndPlaceProposeVote(const std::shared_ptr<PbftBlock> &proposed_block,
415  std::vector<std::shared_ptr<PbftVote>> &&reward_votes);
416 
423  void gossipNewVote(const std::shared_ptr<PbftVote> &vote, const std::shared_ptr<PbftBlock> &voted_block);
424 
430  std::optional<std::pair<std::shared_ptr<PbftBlock>, std::vector<std::shared_ptr<PbftVote>>>> proposePbftBlock();
431 
438  std::optional<PbftBlockExtraData> createPbftBlockExtraData(PbftPeriod pbft_period) const;
439 
447  // TODO: exchange round <-> period
448  std::shared_ptr<PbftBlock> identifyLeaderBlock_(PbftRound round, PbftPeriod period);
449 
455  h256 getProposal(const std::shared_ptr<PbftVote> &vote) const;
456 
466  bool validatePbftBlock(const std::shared_ptr<PbftBlock> &pbft_block) const;
467 
473  PbftStateRootValidation validateFinalChainHash(const std::shared_ptr<PbftBlock> &pbft_block) const;
474 
483  bool validatePbftBlockExtraData(const std::shared_ptr<PbftBlock> &pbft_block) const;
484 
491  bool pushCertVotedPbftBlockIntoChain_(const std::shared_ptr<PbftBlock> &pbft_block,
492  std::vector<std::shared_ptr<PbftVote>> &&current_round_cert_votes);
493 
500  void finalize_(PeriodData &&period_data, std::vector<h256> &&finalized_dag_blk_hashes,
501  bool synchronous_processing = false);
502 
509  bool pushPbftBlock_(PeriodData &&period_data, std::vector<std::shared_ptr<PbftVote>> &&cert_votes);
510 
519  std::shared_ptr<PbftBlock> getValidPbftProposedBlock(PbftPeriod period, const blk_hash_t &block_hash);
520 
525  std::optional<std::pair<PeriodData, std::vector<std::shared_ptr<PbftVote>>>> processPeriodData();
526 
534  bool validatePbftBlockCertVotes(const std::shared_ptr<PbftBlock> pbft_block,
535  const std::vector<std::shared_ptr<PbftVote>> &cert_votes) const;
536 
543  bool validatePbftBlockPillarVotes(const PeriodData &period_data) const;
544 
549  bool canParticipateInConsensus(PbftPeriod period) const;
550 
554  void printVotingSummary() const;
555 
561  void processPillarBlock(PbftPeriod period);
562 
563  std::atomic<bool> stopped_ = true;
564 
565  // Multiple proposed pbft blocks could have same dag block anchor at same period so this cache improves retrieval of
566  // dag block order for specific anchor
567  mutable std::unordered_map<blk_hash_t, std::vector<DagBlock>> anchor_dag_block_order_cache_;
568 
569  std::unique_ptr<std::thread> daemon_;
570  std::shared_ptr<DbStorage> db_;
571  std::shared_ptr<PbftChain> pbft_chain_;
572  std::shared_ptr<VoteManager> vote_mgr_;
573  std::shared_ptr<DagManager> dag_mgr_;
574  std::weak_ptr<Network> network_;
575  std::shared_ptr<TransactionManager> trx_mgr_;
576  std::shared_ptr<final_chain::FinalChain> final_chain_;
577  std::shared_ptr<pillar_chain::PillarChainManager> pillar_chain_mgr_;
578 
581 
582  const std::chrono::milliseconds kMinLambda; // [ms]
583  std::chrono::milliseconds lambda_{0}; // [ms]
584  const std::chrono::milliseconds kMaxLambda{60000}; // in ms, max lambda is 1 minutes
585 
586  const uint32_t kBroadcastVotesLambdaTime = 20;
587  const uint32_t kRebroadcastVotesLambdaTime = 60;
592 
594  std::atomic<PbftRound> round_ = 1;
596 
597  // Block that node cert voted
598  std::optional<std::shared_ptr<PbftBlock>> cert_voted_block_for_round_{};
599 
600  // All broadcasted votes created by a node in current round - just for summary logging purposes
601  std::map<blk_hash_t, std::vector<PbftStep>> current_round_broadcasted_votes_;
602 
606  std::chrono::milliseconds next_step_time_ms_{0};
607 
608  bool executed_pbft_block_ = false;
611  bool go_finish_state_ = false;
614 
615  // Used to avoid cyclic logging in voting steps that are called repeatedly
617  bool printCertStepInfo_ = true;
618 
620 
622 
623  std::condition_variable stop_cv_;
624  std::mutex stop_mtx_;
625 
627 
628  // Proposed blocks based on received propose votes
630 
632 };
633 
636 } // namespace taraxa
class ProposedBlocks holds proposed pbft blocks together with propose votes hashes per period & round
Definition: proposed_blocks.hpp:18
std::chrono::system_clock::time_point time_point
Definition: pbft_manager.hpp:55
uint32_t rebroadcast_reward_votes_counter_
Definition: pbft_manager.hpp:591
const addr_t node_addr_
Definition: pbft_manager.hpp:579
std::shared_ptr< pillar_chain::PillarChainManager > pillar_chain_mgr_
Definition: pbft_manager.hpp:577
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:1044
std::atomic< PbftRound > round_
Definition: pbft_manager.hpp:594
void testBroadcastVotesFunctionality()
Test/enforce broadcastVotes() to actually send votes.
Definition: pbft_manager.cpp:638
const std::chrono::milliseconds kMinLambda
Definition: pbft_manager.hpp:582
std::shared_ptr< PbftChain > pbft_chain_
Definition: pbft_manager.hpp:571
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:771
void setPbftStep(PbftStep pbft_step)
Set PBFT step.
Definition: pbft_manager.cpp:234
const blk_hash_t dag_genesis_block_hash_
Definition: pbft_manager.hpp:619
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:703
bool executed_pbft_block_
Definition: pbft_manager.hpp:608
void start()
Start PBFT daemon.
Definition: pbft_manager.cpp:92
void setFilterState_()
Set PBFT filter state.
Definition: pbft_manager.cpp:505
std::chrono::milliseconds getPbftInitialLambda() const
Get PBFT lambda. PBFT lambda is a timer clock.
Definition: pbft_manager.hpp:201
uint32_t rebroadcast_votes_counter_
Definition: pbft_manager.hpp:589
std::optional< std::pair< std::shared_ptr< PbftBlock >, std::vector< std::shared_ptr< PbftVote > > > > proposePbftBlock()
Propose a new PBFT block.
Definition: pbft_manager.cpp:1197
std::shared_ptr< TransactionManager > trx_mgr_
Definition: pbft_manager.hpp:575
bool already_next_voted_null_block_hash_
Definition: pbft_manager.hpp:610
std::unordered_map< blk_hash_t, std::vector< DagBlock > > anchor_dag_block_order_cache_
Definition: pbft_manager.hpp:567
std::shared_ptr< PbftBlock > identifyLeaderBlock_(PbftRound round, PbftPeriod period)
Identify a leader block from all received proposed PBFT blocks for the current round by using minimum...
Definition: pbft_manager.cpp:1346
void setFinishState_()
Set PBFT finish state.
Definition: pbft_manager.cpp:518
std::pair< bool, PbftPeriod > getDagBlockPeriod(const blk_hash_t &hash)
Get a DAG block period number.
Definition: pbft_manager.cpp:173
void sleep_()
Time to sleep for PBFT protocol.
Definition: pbft_manager.cpp:402
static blk_hash_t calculateOrderHash(const std::vector< blk_hash_t > &dag_block_hashes)
Calculate DAG blocks ordering hash.
Definition: pbft_manager.cpp:1162
~PbftManager()
Definition: pbft_manager.cpp:88
size_t periodDataQueueSize() const
Get PBFT blocks syncing queue size.
Definition: pbft_manager.cpp:2147
bool go_finish_state_
Definition: pbft_manager.hpp:611
void setNetwork(std::weak_ptr< Network > network)
Set network as a weak pointer.
Definition: pbft_manager.cpp:90
void setCertifyState_()
Set PBFT certify state.
Definition: pbft_manager.cpp:511
PbftPeriod pbftSyncingPeriod() const
Get PBFT blocks synced period.
Definition: pbft_manager.cpp:1833
size_t getPbftCommitteeSize() const
Get PBFT committee size.
Definition: pbft_manager.hpp:254
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:1694
bool advanceRound()
If node receives 2t+1 next votes for some block(including kNullBlockHash), advance round to + 1.
Definition: pbft_manager.cpp:326
std::chrono::milliseconds lambda_
Definition: pbft_manager.hpp:583
PbftStates state_
Definition: pbft_manager.hpp:593
PbftStep getPbftStep() const
Get PBFT step number.
Definition: pbft_manager.cpp:193
void identifyBlock_()
PBFT filter state. PBFT step 2. Identify a leader block from all received proposed blocks for the cur...
Definition: pbft_manager.cpp:879
std::optional< uint64_t > getCurrentNodeVotesCount() const
Get current node DPOS votes count.
Definition: pbft_manager.cpp:222
uint32_t broadcast_reward_votes_counter_
Definition: pbft_manager.hpp:590
bool stateOperations_()
If there are any synced PBFT blocks from peers, push the synced blocks in PBFT chain....
Definition: pbft_manager.cpp:667
time_point second_finish_step_start_datetime_
Definition: pbft_manager.hpp:605
std::atomic< bool > stopped_
Definition: pbft_manager.hpp:563
std::shared_ptr< DagManager > dag_mgr_
Definition: pbft_manager.hpp:573
bool validatePbftBlockExtraData(const std::shared_ptr< PbftBlock > &pbft_block) const
Validates pbft block extra data presence:
Definition: pbft_manager.cpp:1408
std::chrono::milliseconds next_step_time_ms_
Definition: pbft_manager.hpp:606
h256 getProposal(const std::shared_ptr< PbftVote > &vote) const
Calculate the lowest hash of a vote by vote weight.
Definition: pbft_manager.cpp:1334
uint32_t broadcast_votes_counter_
Definition: pbft_manager.hpp:588
PbftManager(const FullNodeConfig &conf, std::shared_ptr< DbStorage > db, std::shared_ptr< PbftChain > pbft_chain, std::shared_ptr< VoteManager > vote_mgr, std::shared_ptr< DagManager > dag_mgr, std::shared_ptr< TransactionManager > trx_mgr, std::shared_ptr< final_chain::FinalChain > final_chain, std::shared_ptr< pillar_chain::PillarChainManager > pillar_chain_mgr)
Definition: pbft_manager.cpp:23
void printVotingSummary() const
Prints all votes generated by node in current round.
Definition: pbft_manager.cpp:646
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition: pbft_manager.hpp:576
PbftManager & operator=(const PbftManager &)=delete
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:1558
PbftPeriod getPbftPeriod() const
Get current PBFT period number.
Definition: pbft_manager.cpp:185
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:2161
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:985
std::mutex stop_mtx_
Definition: pbft_manager.hpp:624
bool validatePbftBlock(const std::shared_ptr< PbftBlock > &pbft_block) const
Validates pbft block. It checks if:
Definition: pbft_manager.cpp:1464
std::optional< uint64_t > getCurrentDposTotalVotesCount() const
Get current total DPOS votes count.
Definition: pbft_manager.cpp:210
void pushSyncedPbftBlocksIntoChain()
Check PBFT blocks syncing queue. If there are synced PBFT blocks in queue, push it to PBFT chain.
Definition: pbft_manager.cpp:1594
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:344
bool canParticipateInConsensus(PbftPeriod period) const
Definition: pbft_manager.cpp:2114
PbftPeriod last_placed_pillar_vote_period_
Definition: pbft_manager.hpp:613
void setPbftRound(PbftRound round)
Set PBFT round number.
Definition: pbft_manager.cpp:195
const std::chrono::milliseconds kMaxLambda
Definition: pbft_manager.hpp:584
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:2137
std::optional< std::pair< std::shared_ptr< PbftBlock >, std::vector< std::shared_ptr< PbftVote > > > > 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)
Generate PBFT block, push into unverified queue, and broadcast to peers.
Definition: pbft_manager.cpp:1116
PeriodDataQueue sync_queue_
Definition: pbft_manager.hpp:626
blk_hash_t getLastPbftBlockHash()
Definition: pbft_manager.cpp:2159
std::chrono::milliseconds elapsedTimeInMs(const time_point &start_time)
Definition: pbft_manager.cpp:398
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:807
PbftStateRootValidation validateFinalChainHash(const std::shared_ptr< PbftBlock > &pbft_block) const
Validates pbft block final chain hash.
Definition: pbft_manager.cpp:1390
bool checkBlockWeight(const std::vector< DagBlock > &dag_blocks) const
Check a block weight of gas estimation.
Definition: pbft_manager.cpp:2149
ProposedBlocks proposed_blocks_
Definition: pbft_manager.hpp:629
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:1970
std::optional< PbftBlockExtraData > createPbftBlockExtraData(PbftPeriod pbft_period) const
Creates pbft block extra data.
Definition: pbft_manager.cpp:1312
void certifyBlock_()
PBFT certify state. PBFT step 3. If receive enough soft votes and pass verification,...
Definition: pbft_manager.cpp:923
void resetStep()
Reset PBFT step to 1.
Definition: pbft_manager.cpp:273
std::condition_variable stop_cv_
Definition: pbft_manager.hpp:623
void setFinishPollingState_()
Set PBFT finish polling state.
Definition: pbft_manager.cpp:525
const GenesisConfig & kGenesisConfig
Definition: pbft_manager.hpp:621
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:1674
bool loop_back_finish_state_
Definition: pbft_manager.hpp:612
bool printSecondFinishStepInfo_
Definition: pbft_manager.hpp:616
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:1621
void stop()
Stop PBFT daemon.
Definition: pbft_manager.cpp:101
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:1837
PbftManager(const PbftManager &)=delete
bool periodDataQueueEmpty() const
Returns true if queue is empty.
Definition: pbft_manager.cpp:2135
std::weak_ptr< Network > network_
Definition: pbft_manager.hpp:574
void processProposedBlock(const std::shared_ptr< PbftBlock > &proposed_block, const std::shared_ptr< PbftVote > &propose_vote)
Push proposed block into the proposed_blocks_ in case it is not there yet.
Definition: pbft_manager.cpp:1153
time_point current_round_start_datetime_
Definition: pbft_manager.hpp:603
void broadcastVotes()
Broadcast or rebroadcast 2t+1 soft/reward/previous round next votes + all own votes if needed.
Definition: pbft_manager.cpp:551
PbftManager & operator=(PbftManager &&)=delete
bool already_next_voted_value_
Definition: pbft_manager.hpp:609
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:1441
bool validatePbftBlockPillarVotes(const PeriodData &period_data) const
Validates PBFT block pillar votes.
Definition: pbft_manager.cpp:2053
blk_hash_t lastPbftBlockHashFromQueueOrChain()
Get last pbft block hash from queue or if queue empty, from chain.
Definition: pbft_manager.cpp:2127
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:305
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:278
std::map< blk_hash_t, std::vector< PbftStep > > current_round_broadcasted_votes_
Definition: pbft_manager.hpp:601
std::unique_ptr< std::thread > daemon_
Definition: pbft_manager.hpp:569
void initialState()
Initial PBFT states when node start PBFT.
Definition: pbft_manager.cpp:419
const uint32_t kBroadcastVotesLambdaTime
Definition: pbft_manager.hpp:586
void run()
Run PBFT daemon.
Definition: pbft_manager.cpp:124
PbftRound getPbftRound() const
Get current PBFT round number.
Definition: pbft_manager.cpp:187
std::pair< PbftRound, PbftPeriod > getPbftRoundAndPeriod() const
Get PBFT round & period number.
Definition: pbft_manager.cpp:189
PbftStep step_
Definition: pbft_manager.hpp:595
void waitForPeriodFinalization()
wait for DPOS period finalization
Definition: pbft_manager.cpp:200
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:831
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:818
void processPillarBlock(PbftPeriod period)
Creates pillar block (and pillar vote in case node is eligible to vote & is not syncing)
Definition: pbft_manager.cpp:1799
std::shared_ptr< VoteManager > vote_mgr_
Definition: pbft_manager.hpp:572
const secret_t node_sk_
Definition: pbft_manager.hpp:580
const uint32_t kRebroadcastVotesLambdaTime
Definition: pbft_manager.hpp:587
std::optional< std::shared_ptr< PbftBlock > > cert_voted_block_for_round_
Definition: pbft_manager.hpp:598
bool placeVote(const std::shared_ptr< PbftVote > &vote, std::string_view log_vote_id, const std::shared_ptr< PbftBlock > &voted_block)
Place (gossip) vote.
Definition: pbft_manager.cpp:726
bool printCertStepInfo_
Definition: pbft_manager.hpp:617
void loopBackFinishState_()
Set back to PBFT finish state from PBFT finish polling state.
Definition: pbft_manager.cpp:539
std::shared_ptr< DbStorage > db_
Definition: pbft_manager.hpp:570
time_point current_period_start_datetime_
Definition: pbft_manager.hpp:604
PbftManager class is a daemon that is used to finalize a bench of directed acyclic graph (DAG) blocks...
Definition: pbft_manager.hpp:53
PeriodData class is for block execution, that includes PBFT block, certify votes, DAG blocks,...
Definition: period_data.hpp:25
PeriodDataQueue class is a syncing queue, the queue stores blocks synced from peers.
Definition: period_data_queue.hpp:20
PbftStateRootValidation
Definition: pbft_manager.hpp:22
PbftStates
Definition: pbft_manager.hpp:21
@ finish_state
Definition: pbft_manager.hpp:21
@ certify_state
Definition: pbft_manager.hpp:21
@ value_proposal_state
Definition: pbft_manager.hpp:21
@ finish_polling_state
Definition: pbft_manager.hpp:21
@ filter_state
Definition: pbft_manager.hpp:21
#define LOG_OBJECTS_DEFINE
Definition: logger.hpp:60
std::chrono::system_clock::time_point time_point
Definition: watches.hpp:12
Definition: config.hpp:8
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:81
Definition: config.hpp:24
Definition: genesis.hpp:23
PbftConfig pbft
Definition: genesis.hpp:28
uint32_t committee_size
Definition: pbft_config.hpp:11