TARAXA
transaction_packet_handler.hpp
Go to the documentation of this file.
1 #pragma once
2 
5 
6 namespace taraxa {
7 class TransactionManager;
8 enum class TransactionStatus;
9 } // namespace taraxa
10 
11 namespace taraxa::network::tarcap {
12 
13 class TestState;
14 
16  public:
17  TransactionPacketHandler(const FullNodeConfig& conf, std::shared_ptr<PeersState> peers_state,
18  std::shared_ptr<TimePeriodPacketsStats> packets_stats,
19  std::shared_ptr<TransactionManager> trx_mgr, const addr_t& node_addr,
20  const std::string& logs_prefix = "TRANSACTION_PH");
21 
29  void sendTransactions(std::shared_ptr<TaraxaPeer> peer,
30  std::pair<SharedTransactions, std::vector<trx_hash_t>>&& transactions);
31 
38  void periodicSendTransactions(std::vector<SharedTransactions>&& transactions);
39 
40  // Packet type that is processed by this handler
42 
43  // 2 items: hashes and transactions
44  static constexpr uint32_t kTransactionPacketItemCount = 2;
45 
46  private:
47  virtual void validatePacketRlpFormat(const threadpool::PacketData& packet_data) const override;
48  virtual void process(const threadpool::PacketData& packet_data, const std::shared_ptr<TaraxaPeer>& peer) override;
49 
50  protected:
57  std::vector<std::pair<std::shared_ptr<TaraxaPeer>, std::pair<SharedTransactions, std::vector<trx_hash_t>>>>
58  transactionsToSendToPeers(std::vector<SharedTransactions>&& transactions);
59 
68  std::pair<uint32_t, std::pair<SharedTransactions, std::vector<trx_hash_t>>> transactionsToSendToPeer(
69  std::shared_ptr<TaraxaPeer> peer, const std::vector<SharedTransactions>& transactions,
70  uint32_t account_start_index);
71 
72  std::shared_ptr<TransactionManager> trx_mgr_;
73 
74  std::atomic<uint64_t> received_trx_count_{0};
75  std::atomic<uint64_t> unique_received_trx_count_{0};
76 };
77 
78 } // namespace taraxa::network::tarcap
Definition: FixedHash.h:35
Packet handler base class that consists of shared state and some commonly used functions.
Definition: packet_handler.hpp:25
Definition: transaction_packet_handler.hpp:15
virtual void validatePacketRlpFormat(const threadpool::PacketData &packet_data) const override
Validates packet rlp format - items count.
Definition: transaction_packet_handler.cpp:17
virtual void process(const threadpool::PacketData &packet_data, const std::shared_ptr< TaraxaPeer > &peer) override
Main packet processing function.
Definition: transaction_packet_handler.cpp:38
void periodicSendTransactions(std::vector< SharedTransactions > &&transactions)
Sends batch of transactions to all connected peers.
Definition: transaction_packet_handler.cpp:177
std::shared_ptr< TransactionManager > trx_mgr_
Definition: transaction_packet_handler.hpp:72
std::vector< std::pair< std::shared_ptr< TaraxaPeer >, std::pair< SharedTransactions, std::vector< trx_hash_t > > > > transactionsToSendToPeers(std::vector< SharedTransactions > &&transactions)
select which transactions and hashes to send to which connected peer
Definition: transaction_packet_handler.cpp:147
static constexpr SubprotocolPacketType kPacketType_
Definition: transaction_packet_handler.hpp:41
TransactionPacketHandler(const FullNodeConfig &conf, std::shared_ptr< PeersState > peers_state, std::shared_ptr< TimePeriodPacketsStats > packets_stats, std::shared_ptr< TransactionManager > trx_mgr, const addr_t &node_addr, const std::string &logs_prefix="TRANSACTION_PH")
Definition: transaction_packet_handler.cpp:10
std::atomic< uint64_t > unique_received_trx_count_
Definition: transaction_packet_handler.hpp:75
std::atomic< uint64_t > received_trx_count_
Definition: transaction_packet_handler.hpp:74
static constexpr uint32_t kTransactionPacketItemCount
Definition: transaction_packet_handler.hpp:44
std::pair< uint32_t, std::pair< SharedTransactions, std::vector< trx_hash_t > > > transactionsToSendToPeer(std::shared_ptr< TaraxaPeer > peer, const std::vector< SharedTransactions > &transactions, uint32_t account_start_index)
select which transactions and hashes to send to peer
Definition: transaction_packet_handler.cpp:103
void sendTransactions(std::shared_ptr< TaraxaPeer > peer, std::pair< SharedTransactions, std::vector< trx_hash_t >> &&transactions)
Send transactions.
Definition: transaction_packet_handler.cpp:190
Definition: packet_data.hpp:12
TransactionStatus
TransactionStatus enum class defines current transaction status.
Definition: transaction_manager.hpp:19
Definition: vote_manager.hpp:23
SubprotocolPacketType
SubprotocolPacketType is used in networking layer to differentiate packet types.
Definition: packet_types.hpp:12
@ TransactionPacket
Definition: packet_types.hpp:24
Definition: config.hpp:8
std::vector< SharedTransaction > SharedTransactions
Definition: transaction.hpp:81
Definition: config.hpp:24