TARAXA
Loading...
Searching...
No Matches
transaction_manager.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <cstddef>
4
5#include "common/event.hpp"
7#include "common/util.hpp"
9#include "logger/logging.hpp"
10#include "storage/storage.hpp"
12#include "transaction_queue.hpp"
13
14namespace taraxa {
15
24
25struct FullNodeConfig;
26class DagBlock;
27class DagManager;
28
54class TransactionManager : public std::enable_shared_from_this<TransactionManager> {
55 public:
56 TransactionManager(const FullNodeConfig &conf, std::shared_ptr<DbStorage> db,
57 std::shared_ptr<final_chain::FinalChain> final_chain);
58
65 uint64_t estimateTransactions(const SharedTransactions &trxs, PbftPeriod proposal_period);
66
73 state_api::ExecutionResult estimateTransactionGas(std::shared_ptr<Transaction> trx, PbftPeriod proposal_period);
74
81 std::pair<SharedTransactions, std::vector<uint64_t>> packTrxs(PbftPeriod proposal_period, uint64_t weight_limit);
82
87 std::vector<SharedTransactions> getAllPoolTrxs();
88
93
100 std::pair<bool, std::string> insertTransaction(const std::shared_ptr<Transaction> &trx);
101
107 void blockFinalized(EthBlockNumber block_number);
108
117 TransactionStatus insertValidatedTransaction(std::shared_ptr<Transaction> &&tx, bool insert_non_proposable = true);
118
123 bool isTransactionKnown(const trx_hash_t &trx_hash);
124
125 size_t getTransactionPoolSize() const;
126
134 bool isTransactionPoolFull(size_t percentage = 100) const;
135
143
144 size_t getNonfinalizedTrxSize() const;
145
152 std::vector<std::shared_ptr<Transaction>> getNonfinalizedTrx(const std::vector<trx_hash_t> &hashes);
153
160 std::unordered_set<trx_hash_t> excludeFinalizedTransactions(const std::vector<trx_hash_t> &hashes);
161
169
177 SharedTransactions getBlockTransactions(const DagBlock &blk, PbftPeriod proposal_period);
178
186 SharedTransactions getTransactions(const vec_trx_t &trxs_hashes, PbftPeriod proposal_period);
187
196 void updateFinalizedTransactionsStatus(const PeriodData &period_data);
197
204
212 void removeNonFinalizedTransactions(std::unordered_set<trx_hash_t> &&transactions);
213
219 std::shared_mutex &getTransactionsMutex() { return transactions_mutex_; }
220
228 std::pair<std::vector<std::shared_ptr<Transaction>>, std::vector<trx_hash_t>> getPoolTransactions(
229 const std::vector<trx_hash_t> &trx_to_query) const;
230
236 bool transactionsDropped() const;
237
244
245 std::shared_ptr<Transaction> getTransaction(const trx_hash_t &hash) const;
246 std::shared_ptr<Transaction> getNonFinalizedTransaction(const trx_hash_t &hash) const;
247 unsigned long getTransactionCount() const;
259 std::pair<bool, std::string> verifyTransaction(const std::shared_ptr<Transaction> &trx) const;
260
261 private:
263
264 private:
266 // Guards updating transaction status
267 // Transactions can be in one of three states:
268 // 1. In transactions pool; 2. In non-finalized Dag block 3. Executed
269 mutable std::shared_mutex transactions_mutex_;
271 std::unordered_map<trx_hash_t, std::shared_ptr<Transaction>> nonfinalized_transactions_in_dag_;
272 std::unordered_map<trx_hash_t, std::shared_ptr<Transaction>> recently_finalized_transactions_;
273 std::unordered_map<PbftPeriod, std::vector<trx_hash_t>> recently_finalized_transactions_per_period_;
275 uint64_t trx_count_ = 0;
276
277 const uint64_t kDagBlockGasLimit;
278 const uint64_t kEstimateGasLimit = 200000;
279 const uint64_t kRecentlyFinalizedTransactionsMax = 50000;
280
281 std::shared_ptr<DbStorage> db_{nullptr};
282 std::shared_ptr<final_chain::FinalChain> final_chain_{nullptr};
283
285
287
288 public:
290};
291
294} // namespace taraxa
Definition util.hpp:348
DagBlock class is a DAG block class which main data is a list of transaction hashes included in the b...
Definition dag_block.hpp:16
Definition thread_pool.hpp:7
Definition event.hpp:60
Definition state_api_data.hpp:62
PeriodData class is for block execution, that includes PBFT block, certify votes, DAG blocks,...
Definition period_data.hpp:26
std::shared_mutex transactions_mutex_
Definition transaction_manager.hpp:269
uint64_t trx_count_
Definition transaction_manager.hpp:275
ExpirationCacheMap< trx_hash_t, state_api::ExecutionResult > estimations_cache_
Definition transaction_manager.hpp:274
std::unordered_map< trx_hash_t, std::shared_ptr< Transaction > > nonfinalized_transactions_in_dag_
Definition transaction_manager.hpp:271
std::pair< bool, std::string > verifyTransaction(const std::shared_ptr< Transaction > &trx) const
Verifies a transaction.
Definition transaction_manager.cpp:79
std::vector< SharedTransactions > getAllPoolTrxs()
Gets all transactions from pool grouped per account.
Definition transaction_manager.cpp:416
std::shared_ptr< Transaction > getTransaction(const trx_hash_t &hash) const
Definition transaction_manager.cpp:223
size_t getNonfinalizedTrxSize() const
Definition transaction_manager.cpp:317
val_t getMinGasPriceForBlockInclusion() const
Returns minimum gas price needed for transaction to be included in the next proposed dag block.
Definition transaction_manager.cpp:539
void recoverNonfinalizedTransactions()
Definition transaction_manager.cpp:276
std::unordered_set< trx_hash_t > excludeFinalizedTransactions(const std::vector< trx_hash_t > &hashes)
Exclude Finalized transactions.
Definition transaction_manager.cpp:335
util::ThreadPool estimation_thread_pool_
Definition transaction_manager.hpp:284
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition transaction_manager.hpp:282
std::vector< std::shared_ptr< Transaction > > getNonfinalizedTrx(const std::vector< trx_hash_t > &hashes)
Get the Nonfinalized Trx objects from cache.
Definition transaction_manager.cpp:322
const FullNodeConfig & kConf
Definition transaction_manager.hpp:265
const uint64_t kRecentlyFinalizedTransactionsMax
Definition transaction_manager.hpp:279
void blockFinalized(EthBlockNumber block_number)
Invoked when block finalized in final chain.
Definition transaction_manager.cpp:529
std::pair< std::vector< std::shared_ptr< Transaction > >, std::vector< trx_hash_t > > getPoolTransactions(const std::vector< trx_hash_t > &trx_to_query) const
Gets transactions from transactions pool.
Definition transaction_manager.cpp:208
bool verifyTransactionsNotFinalized(const SharedTransactions &trxs)
Verify transactions not finalized.
Definition transaction_manager.cpp:349
bool isTransactionKnown(const trx_hash_t &trx_hash)
Definition transaction_manager.cpp:116
TransactionStatus insertValidatedTransaction(std::shared_ptr< Transaction > &&tx, bool insert_non_proposable=true)
Inserts verified transaction to transaction pool.
Definition transaction_manager.cpp:144
bool nonProposableTransactionsOverTheLimit() const
return true if non proposable transactions are over the limit
Definition transaction_manager.cpp:307
size_t getTransactionPoolSize() const
Definition transaction_manager.cpp:302
bool isTransactionPoolFull(size_t percentage=100) const
return true if transaction pool is full
Definition transaction_manager.cpp:312
std::unordered_map< PbftPeriod, std::vector< trx_hash_t > > recently_finalized_transactions_per_period_
Definition transaction_manager.hpp:273
const uint64_t kEstimateGasLimit
Definition transaction_manager.hpp:278
SharedTransactions getTransactions(const vec_trx_t &trxs_hashes, PbftPeriod proposal_period)
Get the transactions.
Definition transaction_manager.cpp:490
TransactionQueue transactions_pool_
Definition transaction_manager.hpp:270
void updateFinalizedTransactionsStatus(const PeriodData &period_data)
Updates the status of transactions to finalized IMPORTANT: This method is invoked on finalizing a pbf...
Definition transaction_manager.cpp:433
std::unordered_map< trx_hash_t, std::shared_ptr< Transaction > > recently_finalized_transactions_
Definition transaction_manager.hpp:272
bool transactionsDropped() const
Have transactions been recently dropped due to queue reaching max size This call is thread-safe.
Definition transaction_manager.cpp:534
SharedTransactions getBlockTransactions(const DagBlock &blk, PbftPeriod proposal_period)
Get the block transactions.
Definition transaction_manager.cpp:486
void removeNonFinalizedTransactions(std::unordered_set< trx_hash_t > &&transactions)
Removes non-finalized transactions from discarded old dag blocks IMPORTANT: This method is invoked on...
Definition transaction_manager.cpp:473
std::pair< SharedTransactions, std::vector< uint64_t > > packTrxs(PbftPeriod proposal_period, uint64_t weight_limit)
Gets transactions from pool to include in the block with specified weight limit.
Definition transaction_manager.cpp:376
state_api::ExecutionResult estimateTransactionGas(std::shared_ptr< Transaction > trx, PbftPeriod proposal_period)
Estimates required gas value to execute transaction.
Definition transaction_manager.cpp:51
uint64_t estimateTransactions(const SharedTransactions &trxs, PbftPeriod proposal_period)
Estimates required gas value to execute transactions.
Definition transaction_manager.cpp:32
util::Event< TransactionManager, const trx_hash_t & > const transaction_added_
Definition transaction_manager.hpp:289
std::pair< bool, std::string > insertTransaction(const std::shared_ptr< Transaction > &trx)
Inserts and verify new transaction to transaction pool.
Definition transaction_manager.cpp:120
std::shared_ptr< Transaction > getNonFinalizedTransaction(const trx_hash_t &hash) const
void initializeRecentlyFinalizedTransactions(const PeriodData &period_data)
Initialize recently finalized transactions.
Definition transaction_manager.cpp:421
addr_t getFullNodeAddress() const
const uint64_t kDagBlockGasLimit
Definition transaction_manager.hpp:277
unsigned long getTransactionCount() const
Definition transaction_manager.cpp:203
std::shared_ptr< DbStorage > db_
Definition transaction_manager.hpp:281
logger::Logger logger_
Definition transaction_manager.hpp:286
void saveTransactionsFromDagBlock(const SharedTransactions &trxs)
Definition transaction_manager.cpp:232
std::shared_mutex & getTransactionsMutex()
Retrieves transactions mutex, only to be used when finalizing pbft block.
Definition transaction_manager.hpp:219
TransactionManager class verifies and inserts incoming transactions in memory pool and handles saving...
Definition transaction_manager.hpp:54
TransactionQueue keeps transactions in memory sorted by priority to be included in a proposed DAG blo...
Definition transaction_queue.hpp:30
TransactionStatus
TransactionStatus enum class defines current transaction status.
Definition transaction_manager.hpp:23
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
Definition app.hpp:16
uint64_t EthBlockNumber
Definition types.hpp:24
EthBlockNumber PbftPeriod
Definition types.hpp:25
std::vector< SharedTransaction > SharedTransactions
Definition transaction.hpp:86
dev::u256 val_t
Definition types.hpp:48
std::vector< trx_hash_t > vec_trx_t
Definition types.hpp:51
Definition config.hpp:41