hyperledger/iroha
Iroha - A simple, decentralized ledger http://iroha.tech
on_demand_ordering_gate.hpp
Go to the documentation of this file.
1 
6 #ifndef IROHA_ON_DEMAND_ORDERING_GATE_HPP
7 #define IROHA_ON_DEMAND_ORDERING_GATE_HPP
8 
10 
11 #include <shared_mutex>
12 
16 #include "logger/logger_fwd.hpp"
21 
22 namespace iroha {
23  namespace ametsuchi {
24  class TxPresenceCache;
25  }
26 
27  namespace ordering {
28 
34  public:
36  std::shared_ptr<OnDemandOrderingService> ordering_service,
37  std::shared_ptr<transport::OdOsNotification> network_client,
38  std::shared_ptr<shared_model::interface::UnsafeProposalFactory>
39  factory,
40  std::shared_ptr<ametsuchi::TxPresenceCache> tx_cache,
41  size_t transaction_limit,
42  logger::LoggerPtr log);
43 
44  ~OnDemandOrderingGate() override;
45 
46  void propagateBatch(
47  std::shared_ptr<shared_model::interface::TransactionBatch> batch)
48  override;
49 
50  void processRoundSwitch(RoundSwitch const &event);
51 
55  std::optional<network::OrderingEvent> processProposalRequest(
56  ProposalEvent const &event) const;
57 
58  void stop() override;
59 
60  private:
61  void sendCachedTransactions();
62 
66  std::shared_ptr<const shared_model::interface::Proposal>
67  removeReplaysAndDuplicates(
68  std::shared_ptr<const shared_model::interface::Proposal> proposal)
69  const;
70 
71  logger::LoggerPtr log_;
72 
74  size_t transaction_limit_;
75  std::shared_ptr<OnDemandOrderingService> ordering_service_;
76  std::shared_ptr<transport::OdOsNotification> network_client_;
77  std::shared_ptr<shared_model::interface::UnsafeProposalFactory>
78  proposal_factory_;
79  std::shared_ptr<ametsuchi::TxPresenceCache> tx_cache_;
80  consensus::Round current_round_;
81  std::shared_ptr<const LedgerState> current_ledger_state_;
82 
83  std::shared_timed_mutex stop_mutex_;
84  bool stop_requested_{false};
85  };
86 
87  } // namespace ordering
88 } // namespace iroha
89 
90 #endif // IROHA_ON_DEMAND_ORDERING_GATE_HPP
Definition: round_switch.hpp:18
Definition: block_query.hpp:17
Definition: ordering_gate.hpp:27
Definition: on_demand_common.hpp:27
std::shared_ptr< Logger > LoggerPtr
Definition: logger_fwd.hpp:22
Definition: block_query.hpp:15
Definition: round.hpp:31
Definition: on_demand_ordering_gate.hpp:33