TARAXA
taraxa_capability.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <libp2p/Capability.h>
4 #include <libp2p/Common.h>
5 #include <libp2p/Host.h>
6 #include <libp2p/Session.h>
7 
8 #include <memory>
9 
10 #include "common/thread_pool.hpp"
11 #include "config/config.hpp"
16 #include "pbft/pbft_chain.hpp"
18 
19 namespace taraxa {
20 class DbStorage;
21 class PbftManager;
22 class PbftChain;
23 class VoteManager;
24 class DagManager;
25 class TransactionManager;
26 class SlashingManager;
27 enum class TransactionStatus;
28 
29 namespace pillar_chain {
30 class PillarChainManager;
31 }
32 
33 } // namespace taraxa
34 
35 namespace taraxa::network::tarcap {
36 
37 class PacketsHandler;
38 class PbftSyncingState;
39 class TaraxaPeer;
40 
42  public:
46  using InitPacketsHandlers = std::function<std::shared_ptr<PacketsHandler>(
47  const std::string &logs_prefix, const FullNodeConfig &config, const h256 &genesis_hash,
48  const std::shared_ptr<PeersState> &peers_state, const std::shared_ptr<PbftSyncingState> &pbft_syncing_state,
49 
50  const std::shared_ptr<tarcap::TimePeriodPacketsStats> &packets_stats, const std::shared_ptr<DbStorage> &db,
51  const std::shared_ptr<PbftManager> &pbft_mgr, const std::shared_ptr<PbftChain> &pbft_chain,
52  const std::shared_ptr<VoteManager> &vote_mgr, const std::shared_ptr<DagManager> &dag_mgr,
53  const std::shared_ptr<TransactionManager> &trx_mgr, const std::shared_ptr<SlashingManager> &slashing_manager,
54  const std::shared_ptr<pillar_chain::PillarChainManager> &pillar_chain_mgr, TarcapVersion version,
55  const addr_t &node_addr)>;
56 
61 
62  // TODO: remove this once we pass HF
64 
65  public:
66  TaraxaCapability(TarcapVersion version, const FullNodeConfig &conf, const h256 &genesis_hash,
67  std::weak_ptr<dev::p2p::Host> host, const dev::KeyPair &key,
68  std::shared_ptr<network::threadpool::PacketsThreadPool> threadpool,
69  std::shared_ptr<TimePeriodPacketsStats> packets_stats,
70  std::shared_ptr<PbftSyncingState> syncing_state, std::shared_ptr<DbStorage> db,
71  std::shared_ptr<PbftManager> pbft_mgr, std::shared_ptr<PbftChain> pbft_chain,
72  std::shared_ptr<VoteManager> vote_mgr, std::shared_ptr<DagManager> dag_mgr,
73  std::shared_ptr<TransactionManager> trx_mgr, std::shared_ptr<SlashingManager> slashing_manager,
74  std::shared_ptr<pillar_chain::PillarChainManager> pillar_chain_mgr,
75  InitPacketsHandlers init_packets_handlers = kInitLatestVersionHandlers);
76 
77  virtual ~TaraxaCapability() = default;
78  TaraxaCapability(const TaraxaCapability &ro) = delete;
82 
83  // CapabilityFace implemented interface
84  std::string name() const override;
85  TarcapVersion version() const override;
86  unsigned messageCount() const override;
87  void onConnect(std::weak_ptr<dev::p2p::Session> session, u256 const &) override;
88  void onDisconnect(dev::p2p::NodeID const &_nodeID) override;
89  void interpretCapabilityPacket(std::weak_ptr<dev::p2p::Session> session, unsigned _id, dev::RLP const &_r) override;
90  std::string packetTypeToString(unsigned _packetType) const override;
91 
92  const std::shared_ptr<PeersState> &getPeersState();
93 
94  template <typename PacketHandlerType>
95  std::shared_ptr<PacketHandlerType> getSpecificHandler() const;
96 
97  private:
98  bool filterSyncIrrelevantPackets(SubprotocolPacketType packet_type) const;
99  void handlePacketQueueOverLimit(std::shared_ptr<dev::p2p::Host> host, dev::p2p::NodeID node_id, size_t tp_queue_size);
100 
101  private:
102  // Capability version
104 
105  // Packets stats per time period
106  std::shared_ptr<TimePeriodPacketsStats> all_packets_stats_;
107 
108  // Node config
110 
111  // Peers state
112  std::shared_ptr<PeersState> peers_state_;
113 
114  // Syncing state + syncing handler
115  std::shared_ptr<PbftSyncingState> pbft_syncing_state_;
116 
117  // Packets handlers
118  std::shared_ptr<PacketsHandler> packets_handlers_;
119 
120  // Main Threadpool for processing packets
121  std::shared_ptr<threadpool::PacketsThreadPool> thread_pool_;
122 
123  // Last disconnect time and number of peers
126  bool queue_over_limit_ = false;
128 
130 };
131 
132 template <typename PacketHandlerType>
133 std::shared_ptr<PacketHandlerType> TaraxaCapability::getSpecificHandler() const {
134  return packets_handlers_->getSpecificHandler<PacketHandlerType>();
135 }
136 
137 } // namespace taraxa::network::tarcap
Definition: Common.h:154
Definition: RLP.h:56
The Capability interface. This interface has to be implemented to support any devp2p subprotocol.
Definition: Capability.h:16
Definition: taraxa_capability.hpp:41
std::string packetTypeToString(unsigned _packetType) const override
Convert supplied packet type to string - used for logging purposes.
Definition: taraxa_capability.cpp:112
TarcapVersion version_
Definition: taraxa_capability.hpp:103
std::string name() const override
Subprotocol name, used in negotiating common capabilities with the peers.
Definition: taraxa_capability.cpp:61
void onDisconnect(dev::p2p::NodeID const &_nodeID) override
Definition: taraxa_capability.cpp:96
void handlePacketQueueOverLimit(std::shared_ptr< dev::p2p::Host > host, dev::p2p::NodeID node_id, size_t tp_queue_size)
Definition: taraxa_capability.cpp:190
const FullNodeConfig & kConf
Definition: taraxa_capability.hpp:109
uint32_t last_disconnect_number_of_peers_
Definition: taraxa_capability.hpp:127
std::shared_ptr< PbftSyncingState > pbft_syncing_state_
Definition: taraxa_capability.hpp:115
static const InitPacketsHandlers kInitLatestVersionHandlers
Default InitPacketsHandlers function definition with the latest version of packets handlers.
Definition: taraxa_capability.hpp:60
TaraxaCapability(TarcapVersion version, const FullNodeConfig &conf, const h256 &genesis_hash, std::weak_ptr< dev::p2p::Host > host, const dev::KeyPair &key, std::shared_ptr< network::threadpool::PacketsThreadPool > threadpool, std::shared_ptr< TimePeriodPacketsStats > packets_stats, std::shared_ptr< PbftSyncingState > syncing_state, std::shared_ptr< DbStorage > db, std::shared_ptr< PbftManager > pbft_mgr, std::shared_ptr< PbftChain > pbft_chain, std::shared_ptr< VoteManager > vote_mgr, std::shared_ptr< DagManager > dag_mgr, std::shared_ptr< TransactionManager > trx_mgr, std::shared_ptr< SlashingManager > slashing_manager, std::shared_ptr< pillar_chain::PillarChainManager > pillar_chain_mgr, InitPacketsHandlers init_packets_handlers=kInitLatestVersionHandlers)
Definition: taraxa_capability.cpp:31
std::chrono::system_clock::time_point queue_over_limit_start_time_
Definition: taraxa_capability.hpp:125
TaraxaCapability & operator=(const TaraxaCapability &ro)=delete
TaraxaCapability(TaraxaCapability &&ro)=delete
TarcapVersion version() const override
Definition: taraxa_capability.cpp:63
void onConnect(std::weak_ptr< dev::p2p::Session > session, u256 const &) override
Definition: taraxa_capability.cpp:67
std::shared_ptr< PacketsHandler > packets_handlers_
Definition: taraxa_capability.hpp:118
void interpretCapabilityPacket(std::weak_ptr< dev::p2p::Session > session, unsigned _id, dev::RLP const &_r) override
Definition: taraxa_capability.cpp:116
std::shared_ptr< TimePeriodPacketsStats > all_packets_stats_
Definition: taraxa_capability.hpp:106
TaraxaCapability & operator=(TaraxaCapability &&ro)=delete
std::shared_ptr< PacketHandlerType > getSpecificHandler() const
Definition: taraxa_capability.hpp:133
const std::shared_ptr< PeersState > & getPeersState()
Definition: taraxa_capability.cpp:240
TaraxaCapability(const TaraxaCapability &ro)=delete
static const InitPacketsHandlers kInitV3Handlers
Definition: taraxa_capability.hpp:63
std::shared_ptr< threadpool::PacketsThreadPool > thread_pool_
Definition: taraxa_capability.hpp:121
bool queue_over_limit_
Definition: taraxa_capability.hpp:126
std::shared_ptr< PeersState > peers_state_
Definition: taraxa_capability.hpp:112
unsigned messageCount() const override
Number of messages supported by the subprotocol version.
Definition: taraxa_capability.cpp:65
bool filterSyncIrrelevantPackets(SubprotocolPacketType packet_type) const
Definition: taraxa_capability.cpp:229
std::chrono::system_clock::time_point last_ddos_disconnect_time_
Definition: taraxa_capability.hpp:124
std::function< std::shared_ptr< PacketsHandler >(const std::string &logs_prefix, const FullNodeConfig &config, const h256 &genesis_hash, const std::shared_ptr< PeersState > &peers_state, const std::shared_ptr< PbftSyncingState > &pbft_syncing_state, const std::shared_ptr< tarcap::TimePeriodPacketsStats > &packets_stats, const std::shared_ptr< DbStorage > &db, const std::shared_ptr< PbftManager > &pbft_mgr, const std::shared_ptr< PbftChain > &pbft_chain, const std::shared_ptr< VoteManager > &vote_mgr, const std::shared_ptr< DagManager > &dag_mgr, const std::shared_ptr< TransactionManager > &trx_mgr, const std::shared_ptr< SlashingManager > &slashing_manager, const std::shared_ptr< pillar_chain::PillarChainManager > &pillar_chain_mgr, TarcapVersion version, const addr_t &node_addr)> InitPacketsHandlers
Function signature for creating taraxa capability packets handlers.
Definition: taraxa_capability.hpp:55
TransactionStatus
TransactionStatus enum class defines current transaction status.
Definition: transaction_manager.hpp:19
#define LOG_OBJECTS_DEFINE
Definition: logger.hpp:60
boost::multiprecision::number< boost::multiprecision::cpp_int_backend< 256, 256, boost::multiprecision::unsigned_magnitude, boost::multiprecision::unchecked, void > > u256
Definition: Common.h:98
std::chrono::system_clock::time_point time_point
Definition: watches.hpp:12
Definition: vote_manager.hpp:23
unsigned TarcapVersion
Definition: tarcap_version.hpp:4
SubprotocolPacketType
SubprotocolPacketType is used in networking layer to differentiate packet types.
Definition: packet_types.hpp:12
Definition: config.hpp:8
Definition: config.hpp:24