hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
yac_proposal_storage.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_YAC_PROPOSAL_STORAGE_HPP
7 #define IROHA_YAC_PROPOSAL_STORAGE_HPP
8 
9 #include <memory>
10 #include <vector>
11 
12 #include <boost/optional.hpp>
18 #include "logger/logger_fwd.hpp"
20 
21 namespace iroha::consensus::yac {
22  struct VoteMessage;
23 
29  private:
30  // --------| private api |--------
31 
38  auto findStore(const YacHash &store_hash);
39 
40  public:
41  // --------| public api |--------
42 
44  Round store_round,
45  PeersNumberType peers_in_round,
46  std::shared_ptr<SupermajorityChecker> supermajority_checker,
47  logger::LoggerManagerTreePtr log_manager);
48 
56  boost::optional<Answer> insert(VoteMessage vote);
57 
64  boost::optional<Answer> insert(std::vector<VoteMessage> messages);
65 
69  const Round &getStorageKey() const;
70 
74  boost::optional<Answer> getState() const;
75 
76  private:
77  // --------| private api |--------
78 
84  bool shouldInsert(const VoteMessage &msg);
85 
91  bool checkProposalRound(const Round &vote_round);
92 
97  bool checkPeerUniqueness(const VoteMessage &msg);
98 
105  boost::optional<Answer> findRejectProof();
106 
107  // --------| fields |--------
108 
112  boost::optional<Answer> current_state_;
113 
117  std::vector<YacBlockStorage> block_storages_;
118 
122  Round storage_key_;
123 
127  PeersNumberType peers_in_round_;
128 
132  std::shared_ptr<SupermajorityChecker> supermajority_checker_;
133 
137  logger::LoggerManagerTreePtr log_manager_;
138 
142  logger::LoggerPtr log_;
143  };
144 } // namespace iroha::consensus::yac
145 
146 #endif // IROHA_YAC_PROPOSAL_STORAGE_HPP
boost::optional< Answer > getState() const
Definition: yac_proposal_storage.cpp:94
Definition: yac_hash_provider.hpp:25
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
boost::optional< Answer > insert(VoteMessage vote)
Definition: yac_proposal_storage.cpp:52
std::shared_ptr< LoggerManagerTree > LoggerManagerTreePtr
Definition: logger_manager_fwd.hpp:14
size_t PeersNumberType
Type for number of peers in round.
Definition: yac_types.hpp:13
Definition: vote_message.hpp:20
YacProposalStorage(Round store_round, PeersNumberType peers_in_round, std::shared_ptr< SupermajorityChecker > supermajority_checker, logger::LoggerManagerTreePtr log_manager)
Definition: yac_proposal_storage.cpp:40
const Round & getStorageKey() const
Definition: yac_proposal_storage.cpp:90
Definition: yac_proposal_storage.hpp:28
Definition: round.hpp:31
Definition: cluster_order.hpp:16