hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
synchronizer_impl.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_SYNCHRONIZER_IMPL_HPP
7 #define IROHA_SYNCHRONIZER_IMPL_HPP
8 
10 
11 #include <rxcpp/rx-lite.hpp>
15 #include "logger/logger_fwd.hpp"
16 #include "network/block_loader.hpp"
19 
20 namespace iroha {
21 
22  namespace ametsuchi {
23  class BlockQueryFactory;
24  class CommandExecutor;
25  } // namespace ametsuchi
26 
27  namespace synchronizer {
28 
29  class SynchronizerImpl : public Synchronizer {
30  public:
32  std::unique_ptr<iroha::ametsuchi::CommandExecutor> command_executor,
33  std::shared_ptr<network::ConsensusGate> consensus_gate,
34  std::shared_ptr<validation::ChainValidator> validator,
35  std::shared_ptr<ametsuchi::MutableFactory> mutable_factory,
36  std::shared_ptr<ametsuchi::BlockQueryFactory> block_query_factory,
37  std::shared_ptr<network::BlockLoader> block_loader,
38  logger::LoggerPtr log);
39 
40  ~SynchronizerImpl() override;
41 
42  void processOutcome(consensus::GateObject object) override;
43  rxcpp::observable<SynchronizationEvent> on_commit_chain() override;
44 
45  private:
54  ametsuchi::CommitResult downloadAndCommitMissingBlocks(
58  &public_keys);
59 
60  void processNext(const consensus::PairValid &msg);
61 
67  void processDifferent(
68  const consensus::Synchronizable &msg,
70 
71  std::unique_ptr<ametsuchi::MutableStorage> getStorage();
72 
73  std::shared_ptr<iroha::ametsuchi::CommandExecutor> command_executor_;
74 
75  std::shared_ptr<validation::ChainValidator> validator_;
76  std::shared_ptr<ametsuchi::MutableFactory> mutable_factory_;
77  std::shared_ptr<ametsuchi::BlockQueryFactory> block_query_factory_;
78  std::shared_ptr<network::BlockLoader> block_loader_;
79 
80  // internal
81  rxcpp::composite_subscription notifier_lifetime_;
82  rxcpp::subjects::subject<SynchronizationEvent> notifier_;
83  rxcpp::composite_subscription subscription_;
84 
85  logger::LoggerPtr log_;
86  };
87 
88  } // namespace synchronizer
89 } // namespace iroha
90 
91 #endif // IROHA_SYNCHRONIZER_IMPL_HPP
Current pair is valid.
Definition: gate_object.hpp:34
uint64_t HeightType
Type of height (for Block, Proposal etc)
Definition: types.hpp:48
Definition: synchronizer_impl.hpp:29
Definition: synchronizer.hpp:19
Definition: result_fwd.hpp:27
std::vector< std::string > PublicKeyCollectionType
Type of public keys&#39; collection.
Definition: types.hpp:52
Definition: gate_object.hpp:44
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
Definition: block_query.hpp:15
boost::variant< PairValid, VoteOther, ProposalReject, BlockReject, AgreementOnNone, Future > GateObject
Definition: gate_object.hpp:95