TARAXA
Loading...
Searching...
No Matches
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
10namespace taraxa {
11
12class PbftBlock;
13class Vote;
14
19 public:
20 ProposedBlocks(std::shared_ptr<DbStorage> db) : db_(db) {}
21
28 bool pushProposedPbftBlock(const std::shared_ptr<PbftBlock>& proposed_block, bool save_to_db = true);
29
35 void markBlockAsValid(const std::shared_ptr<PbftBlock>& proposed_block);
36
43 std::optional<std::pair<std::shared_ptr<PbftBlock>, bool>> getPbftProposedBlock(PbftPeriod period,
44 const blk_hash_t& block_hash) const;
45
52 bool isInProposedBlocks(PbftPeriod period, const blk_hash_t& block_hash) const;
53
59
66 std::optional<std::string> checkOldBlocksPresence(PbftPeriod current_period) const;
67
71 std::map<PbftPeriod, std::vector<std::shared_ptr<PbftBlock>>> getProposedBlocks() const;
72
73 private:
74 // <PBFT period, <block hash, [block, is_valid_flag]>>
75 std::map<PbftPeriod, std::unordered_map<blk_hash_t, std::pair<std::shared_ptr<PbftBlock>, bool>>> proposed_blocks_;
76 mutable std::shared_mutex proposed_blocks_mutex_;
77 std::shared_ptr<DbStorage> db_;
78};
79
80} // 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:64
ProposedBlocks(std::shared_ptr< DbStorage > db)
Definition proposed_blocks.hpp:20
bool pushProposedPbftBlock(const std::shared_ptr< PbftBlock > &proposed_block, bool save_to_db=true)
Push proposed PBFT block into the proposed blocks.
Definition proposed_blocks.cpp:8
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:77
std::map< PbftPeriod, std::unordered_map< blk_hash_t, std::pair< std::shared_ptr< PbftBlock >, bool > > > proposed_blocks_
Definition proposed_blocks.hpp:75
void markBlockAsValid(const std::shared_ptr< PbftBlock > &proposed_block)
Mark block as valid - no need to validate it again.
Definition proposed_blocks.cpp:25
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:36
std::shared_mutex proposed_blocks_mutex_
Definition proposed_blocks.hpp:76
std::map< PbftPeriod, std::vector< std::shared_ptr< PbftBlock > > > getProposedBlocks() const
Definition proposed_blocks.cpp:87
bool isInProposedBlocks(PbftPeriod period, const blk_hash_t &block_hash) const
Check if specified block is already in proposed blocks.
Definition proposed_blocks.cpp:53
std::shared_ptr< DbStorage > db_
Definition proposed_blocks.hpp:77
Definition app.hpp:16
EthBlockNumber PbftPeriod
Definition types.hpp:25