TARAXA
taraxa_peer.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <libp2p/Common.h>
4 
5 #include <atomic>
6 #include <boost/noncopyable.hpp>
7 
8 #include "common/types.hpp"
9 #include "common/util.hpp"
11 
12 namespace taraxa::network::tarcap {
13 
14 class TaraxaPeer : public boost::noncopyable {
15  public:
16  TaraxaPeer();
17  TaraxaPeer(const dev::p2p::NodeID& id, size_t transaction_pool_size, std::string address);
18 
26  bool markDagBlockAsKnown(const blk_hash_t& hash);
27  bool isDagBlockKnown(const blk_hash_t& hash) const;
28 
36  bool markTransactionAsKnown(const trx_hash_t& hash);
37  bool isTransactionKnown(const trx_hash_t& hash) const;
38 
45  bool markPbftVoteAsKnown(const vote_hash_t& hash);
46  bool isPbftVoteKnown(const vote_hash_t& hash) const;
47 
55  bool markPbftBlockAsKnown(const blk_hash_t& hash);
56  bool isPbftBlockKnown(const blk_hash_t& hash) const;
57 
65  bool markPillarVoteAsKnown(const vote_hash_t& hash);
66  bool isPillarVoteKnown(const vote_hash_t& hash) const;
67 
68  const dev::p2p::NodeID& getId() const;
69 
76 
82  bool dagSyncingAllowed() const;
83 
89  bool requestDagSyncingAllowed() const;
90 
97  void addSentPacket(const std::string& packet_type, const PacketStats& packet);
98 
102  std::pair<std::chrono::system_clock::time_point, PacketStats> getAllPacketsStatsCopy() const;
103 
107  void resetPacketsStats();
108 
112  void resetKnownCaches();
113 
114  public:
115  std::atomic<bool> syncing_ = false;
116  std::atomic<uint64_t> dag_level_ = 0;
117  std::atomic<PbftPeriod> pbft_chain_size_ = 0;
118  std::atomic<PbftPeriod> pbft_period_ = pbft_chain_size_ = 1;
119  std::atomic<PbftRound> pbft_round_ = 1;
120  std::atomic<PbftPeriod> last_status_pbft_chain_size_ = 0;
121  std::atomic_bool peer_dag_synced_ = false;
122  std::atomic_uint64_t peer_dag_synced_time_ = 0;
123  std::atomic_bool peer_dag_syncing_ = false;
124  std::atomic_bool peer_requested_dag_syncing_ = false;
125  std::atomic_uint64_t peer_requested_dag_syncing_time_ = 0;
126  std::atomic_bool peer_light_node = false;
127  std::atomic<PbftPeriod> peer_light_node_history = 0;
128  std::string address_;
129 
130  // Mutex used to prevent race condition between dag syncing and gossiping
131  mutable boost::shared_mutex mutex_for_sending_dag_blocks_;
132 
133  private:
135 
138  // PBFT
141 
142  std::atomic<uint64_t> timestamp_suspicious_packet_ = 0;
143  std::atomic<uint64_t> suspicious_packet_count_ = 0;
144  const uint64_t kMaxSuspiciousPacketPerMinute = 50000;
145 
146  // Performance extensive dag syncing is only allowed to be requested once each kDagSyncingLimit seconds
147  const uint64_t kDagSyncingLimit = 60;
148 
149  // Packets stats for packets sent by *this TaraxaPeer
151 };
152 
153 } // namespace taraxa::network::tarcap
Definition: util.hpp:273
Stats single packet type.
Definition: packet_stats.hpp:13
Stats for all packet types.
Definition: packets_stats.hpp:13
Definition: taraxa_peer.hpp:14
bool requestDagSyncingAllowed() const
Check if it is allowed to receive dag syncing request.
Definition: taraxa_peer.cpp:67
bool markPbftVoteAsKnown(const vote_hash_t &hash)
Mark pbft vote as known.
Definition: taraxa_peer.cpp:31
void resetPacketsStats()
Resets sent packets stats.
Definition: taraxa_peer.cpp:82
std::string address_
Definition: taraxa_peer.hpp:128
std::atomic_uint64_t peer_dag_synced_time_
Definition: taraxa_peer.hpp:122
std::atomic< PbftPeriod > pbft_chain_size_
Definition: taraxa_peer.hpp:117
bool dagSyncingAllowed() const
Check if it is allowed to send dag syncing request.
Definition: taraxa_peer.cpp:60
std::atomic< uint64_t > suspicious_packet_count_
Definition: taraxa_peer.hpp:143
const uint64_t kDagSyncingLimit
Definition: taraxa_peer.hpp:147
bool isPillarVoteKnown(const vote_hash_t &hash) const
Definition: taraxa_peer.cpp:43
ExpirationBlockNumberCache< trx_hash_t > known_transactions_
Definition: taraxa_peer.hpp:137
std::atomic_bool peer_dag_synced_
Definition: taraxa_peer.hpp:121
bool isPbftBlockKnown(const blk_hash_t &hash) const
Definition: taraxa_peer.cpp:39
ExpirationBlockNumberCache< vote_hash_t > known_votes_
Definition: taraxa_peer.hpp:140
bool markDagBlockAsKnown(const blk_hash_t &hash)
Mark dag block as known.
Definition: taraxa_peer.cpp:19
ExpirationBlockNumberCache< blk_hash_t > known_dag_blocks_
Definition: taraxa_peer.hpp:136
ExpirationBlockNumberCache< blk_hash_t > known_pbft_blocks_
Definition: taraxa_peer.hpp:139
std::atomic_uint64_t peer_requested_dag_syncing_time_
Definition: taraxa_peer.hpp:125
std::atomic_bool peer_light_node
Definition: taraxa_peer.hpp:126
std::atomic< bool > syncing_
Definition: taraxa_peer.hpp:115
bool markPbftBlockAsKnown(const blk_hash_t &hash)
Mark pbft block as known.
Definition: taraxa_peer.cpp:35
bool isTransactionKnown(const trx_hash_t &hash) const
Definition: taraxa_peer.cpp:29
dev::p2p::NodeID id_
Definition: taraxa_peer.hpp:134
void resetKnownCaches()
Resets known caches - used for testing.
Definition: taraxa_peer.cpp:84
std::atomic< uint64_t > dag_level_
Definition: taraxa_peer.hpp:116
const dev::p2p::NodeID & getId() const
Definition: taraxa_peer.cpp:45
std::atomic_bool peer_requested_dag_syncing_
Definition: taraxa_peer.hpp:124
void addSentPacket(const std::string &packet_type, const PacketStats &packet)
Adds packet to the stats.
Definition: taraxa_peer.cpp:74
std::pair< std::chrono::system_clock::time_point, PacketStats > getAllPacketsStatsCopy() const
Definition: taraxa_peer.cpp:78
bool reportSuspiciousPacket()
Reports suspicious pacet.
Definition: taraxa_peer.cpp:47
const uint64_t kMaxSuspiciousPacketPerMinute
Definition: taraxa_peer.hpp:144
bool markPillarVoteAsKnown(const vote_hash_t &hash)
Mark pillar block vote as known.
Definition: taraxa_peer.cpp:41
std::atomic< PbftRound > pbft_round_
Definition: taraxa_peer.hpp:119
std::atomic< PbftPeriod > last_status_pbft_chain_size_
Definition: taraxa_peer.hpp:120
bool markTransactionAsKnown(const trx_hash_t &hash)
Mark transaction as known.
Definition: taraxa_peer.cpp:25
PacketsStats sent_packets_stats_
Definition: taraxa_peer.hpp:150
std::atomic< uint64_t > timestamp_suspicious_packet_
Definition: taraxa_peer.hpp:142
boost::shared_mutex mutex_for_sending_dag_blocks_
Definition: taraxa_peer.hpp:131
std::atomic< PbftPeriod > peer_light_node_history
Definition: taraxa_peer.hpp:127
std::atomic< PbftPeriod > pbft_period_
Definition: taraxa_peer.hpp:118
std::atomic_bool peer_dag_syncing_
Definition: taraxa_peer.hpp:123
TaraxaPeer()
Definition: taraxa_peer.cpp:5
bool isPbftVoteKnown(const vote_hash_t &hash) const
Definition: taraxa_peer.cpp:33
bool isDagBlockKnown(const blk_hash_t &hash) const
Definition: taraxa_peer.cpp:23
Definition: vote_manager.hpp:23