TARAXA
proposed_blocks.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <map>
4 #include <optional>
5 #include <shared_mutex>
6 
7 #include "common/types.hpp"
8 #include "storage/storage.hpp"
9 
10 namespace taraxa {
11 
12 class PbftBlock;
13 class Vote;
14 
19  public:
20  ProposedBlocks(std::shared_ptr<DbStorage> db) : db_(db) {}
21 
28  bool pushProposedPbftBlock(const std::shared_ptr<PbftBlock>& proposed_block,
29  const std::shared_ptr<PbftVote>& propose_vote);
30 
37  bool pushProposedPbftBlock(const std::shared_ptr<PbftBlock>& proposed_block, bool save_to_db = true);
38 
44  void markBlockAsValid(const std::shared_ptr<PbftBlock>& proposed_block);
45 
52  std::optional<std::pair<std::shared_ptr<PbftBlock>, bool>> getPbftProposedBlock(PbftPeriod period,
53  const blk_hash_t& block_hash) const;
54 
61  bool isInProposedBlocks(PbftPeriod period, const blk_hash_t& block_hash) const;
62 
68 
75  std::optional<std::string> checkOldBlocksPresence(PbftPeriod current_period) const;
76 
77  private:
78  // <PBFT period, <block hash, [block, is_valid_flag]>>
79  std::map<PbftPeriod, std::unordered_map<blk_hash_t, std::pair<std::shared_ptr<PbftBlock>, bool>>> proposed_blocks_;
80  mutable std::shared_mutex proposed_blocks_mutex_;
81  std::shared_ptr<DbStorage> db_;
82 };
83 
84 } // namespace taraxa
class ProposedBlocks holds proposed pbft blocks together with propose votes hashes per period & round
Definition: proposed_blocks.hpp:18
void cleanupProposedPbftBlocksByPeriod(PbftPeriod period)
Cleanup all proposed PBFT blocks for the finalized period.
Definition: proposed_blocks.cpp:71
ProposedBlocks(std::shared_ptr< DbStorage > db)
Definition: proposed_blocks.hpp:20
std::optional< std::string > checkOldBlocksPresence(PbftPeriod current_period) const
Check if there are any old proposed blocks that were supposed to be deleted.
Definition: proposed_blocks.cpp:84
std::map< PbftPeriod, std::unordered_map< blk_hash_t, std::pair< std::shared_ptr< PbftBlock >, bool > > > proposed_blocks_
Definition: proposed_blocks.hpp:79
void markBlockAsValid(const std::shared_ptr< PbftBlock > &proposed_block)
Mark block as valid - no need to validate it again.
Definition: proposed_blocks.cpp:32
bool pushProposedPbftBlock(const std::shared_ptr< PbftBlock > &proposed_block, const std::shared_ptr< PbftVote > &propose_vote)
Push proposed PBFT block into the proposed blocks.
Definition: proposed_blocks.cpp:8
std::optional< std::pair< std::shared_ptr< PbftBlock >, bool > > getPbftProposedBlock(PbftPeriod period, const blk_hash_t &block_hash) const
Get a proposed PBFT block based on specified period and block hash.
Definition: proposed_blocks.cpp:43
std::shared_mutex proposed_blocks_mutex_
Definition: proposed_blocks.hpp:80
bool isInProposedBlocks(PbftPeriod period, const blk_hash_t &block_hash) const
Check if specified block is already in proposed blocks.
Definition: proposed_blocks.cpp:60
std::shared_ptr< DbStorage > db_
Definition: proposed_blocks.hpp:81
Definition: config.hpp:8
EthBlockNumber PbftPeriod
Definition: types.hpp:24