TARAXA
rewards_stats.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "config/hardfork.hpp"
5 #include "storage/storage.hpp"
6 
7 namespace taraxa::rewards {
13 class Stats {
14  public:
15  Stats(uint32_t committee_size, const HardforksConfig& hardforks, std::shared_ptr<DbStorage> db,
16  std::function<uint64_t(EthBlockNumber)>&& dpos_eligible_total_vote_count, EthBlockNumber last_blk_num = 0);
17 
23  std::vector<BlockStats> processStats(const PeriodData& current_blk, const std::vector<gas_t>& trxs_gas_used,
24  Batch& write_batch);
29  void clear(uint64_t current_period);
30 
31  protected:
35  void recoverFromDb(EthBlockNumber last_blk_num);
39  uint32_t getCurrentDistributionFrequency(uint64_t current_period) const;
40  /*
41  * @brief gets all needed data and makes(processes) BlocksStats
42  * @param current_blk block to process
43  * @return block statistics needed for rewards distribution
44  */
45  BlockStats getBlockStats(const PeriodData& current_blk, const std::vector<gas_t>& trxs_fees);
49  void saveBlockStats(uint64_t number, const BlockStats& stats, Batch& write_batch);
50 
51  const uint32_t kCommitteeSize;
53  std::shared_ptr<DbStorage> db_;
54  const std::function<uint64_t(EthBlockNumber)> dpos_eligible_total_vote_count_;
55  std::unordered_map<PbftPeriod, BlockStats> blocks_stats_;
56 };
57 } // namespace taraxa::rewards
Definition: block_stats.hpp:14
class that is managing rewards stats processing and hardforks(intervals changes) So intermediate bloc...
Definition: rewards_stats.hpp:13
std::vector< BlockStats > processStats(const PeriodData &current_blk, const std::vector< gas_t > &trxs_gas_used, Batch &write_batch)
processing passed block and returns stats that should be processed at this block
Definition: rewards_stats.cpp:69
void saveBlockStats(uint64_t number, const BlockStats &stats, Batch &write_batch)
saves stats to database to not lose this data in case of node restart
Definition: rewards_stats.cpp:30
std::unordered_map< PbftPeriod, BlockStats > blocks_stats_
Definition: rewards_stats.hpp:55
uint32_t getCurrentDistributionFrequency(uint64_t current_period) const
returns rewards distribution frequency for specified period
Definition: rewards_stats.cpp:36
void recoverFromDb(EthBlockNumber last_blk_num)
recover current interval stats from database
Definition: rewards_stats.cpp:17
Stats(uint32_t committee_size, const HardforksConfig &hardforks, std::shared_ptr< DbStorage > db, std::function< uint64_t(EthBlockNumber)> &&dpos_eligible_total_vote_count, EthBlockNumber last_blk_num=0)
Definition: rewards_stats.cpp:8
const uint32_t kCommitteeSize
Definition: rewards_stats.hpp:51
std::shared_ptr< DbStorage > db_
Definition: rewards_stats.hpp:53
void clear(uint64_t current_period)
called on start of new rewards interval. clears blocks_stats_ collection and removes all data saved i...
Definition: rewards_stats.cpp:45
BlockStats getBlockStats(const PeriodData &current_blk, const std::vector< gas_t > &trxs_fees)
Definition: rewards_stats.cpp:54
const std::function< uint64_t(EthBlockNumber)> dpos_eligible_total_vote_count_
Definition: rewards_stats.hpp:54
const HardforksConfig kHardforksConfig
Definition: rewards_stats.hpp:52
PeriodData class is for block execution, that includes PBFT block, certify votes, DAG blocks,...
Definition: period_data.hpp:25
Definition: block_stats.hpp:8
rocksdb::WriteBatch Batch
Definition: storage.hpp:73
uint64_t EthBlockNumber
Definition: types.hpp:23
Definition: hardfork.hpp:93