TARAXA
Loading...
Searching...
No Matches
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
13
14class 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:275
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:24