TARAXA
sortition_params_manager.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include "pbft/period_data.hpp"
4 #include "storage/storage.hpp"
5 #include "vdf/config.hpp"
6 
7 namespace taraxa {
8 
9 using EfficienciesMap = std::map<uint16_t, int32_t>;
10 
21  uint16_t interval_efficiency = 0;
22 
23  SortitionParamsChange() = default;
24  SortitionParamsChange(PbftPeriod period, uint16_t efficiency, const VrfParams& vrf);
26  bytes rlp() const;
27 };
28 
37  public:
38  SortitionParamsManager(const addr_t& node_addr, SortitionConfig sort_conf, std::shared_ptr<DbStorage> db);
39  SortitionParams getSortitionParams(std::optional<PbftPeriod> for_period = {}) const;
40 
48  uint16_t calculateDagEfficiency(const PeriodData& block) const;
49 
58  void pbftBlockPushed(const PeriodData& block, Batch& batch, PbftPeriod non_empty_pbft_chain_size);
59 
64  uint16_t averageDagEfficiency();
65 
70  const std::deque<SortitionParamsChange>& getParamsChanges() const { return params_changes_; }
71 
72  protected:
74  std::shared_ptr<DbStorage> db_;
75  std::deque<uint16_t> dag_efficiencies_;
77  std::deque<SortitionParamsChange> params_changes_;
79  EfficienciesMap getEfficienciesToUpperRange(uint16_t efficiency, int32_t threshold) const;
80  int32_t getNewUpperRange(uint16_t efficiency) const;
81  void cleanup();
82 
84 };
87 } // namespace taraxa
Definition: FixedHash.h:35
Definition: RLP.h:56
SortitionParamsManager(const addr_t &node_addr, SortitionConfig sort_conf, std::shared_ptr< DbStorage > db)
Definition: sortition_params_manager.cpp:28
std::deque< uint16_t > dag_efficiencies_
Definition: sortition_params_manager.hpp:75
SortitionParams getSortitionParams(std::optional< PbftPeriod > for_period={}) const
Definition: sortition_params_manager.cpp:64
SortitionParamsChange calculateChange(PbftPeriod period)
Definition: sortition_params_manager.cpp:219
uint16_t calculateDagEfficiency(const PeriodData &block) const
Definition: sortition_params_manager.cpp:77
VrfParams vrf_params
Definition: sortition_params_manager.hpp:20
const std::deque< SortitionParamsChange > & getParamsChanges() const
Definition: sortition_params_manager.hpp:70
int32_t getNewUpperRange(uint16_t efficiency) const
Definition: sortition_params_manager.cpp:177
void cleanup()
Definition: sortition_params_manager.cpp:94
std::shared_ptr< DbStorage > db_
Definition: sortition_params_manager.hpp:74
std::deque< SortitionParamsChange > params_changes_
Definition: sortition_params_manager.hpp:77
uint16_t interval_efficiency
Definition: sortition_params_manager.hpp:21
void pbftBlockPushed(const PeriodData &block, Batch &batch, PbftPeriod non_empty_pbft_chain_size)
Definition: sortition_params_manager.cpp:101
bytes rlp() const
Definition: sortition_params_manager.cpp:8
uint32_t ignored_efficiency_counter_
Definition: sortition_params_manager.hpp:76
PbftPeriod period
Definition: sortition_params_manager.hpp:19
static SortitionParamsChange from_rlp(const dev::RLP &rlp)
Definition: sortition_params_manager.cpp:18
SortitionConfig config_
Definition: sortition_params_manager.hpp:73
uint16_t averageDagEfficiency()
Definition: sortition_params_manager.cpp:89
EfficienciesMap getEfficienciesToUpperRange(uint16_t efficiency, int32_t threshold) const
Definition: sortition_params_manager.cpp:161
SortitionParamsManager class calculates DAG efficiency and makes VDF difficulty adjustments.
Definition: sortition_params_manager.hpp:36
Changing vrf params for DAG blocks generation.
Definition: sortition_params_manager.hpp:18
PeriodData class is for block execution, that includes PBFT block, certify votes, DAG blocks,...
Definition: period_data.hpp:25
#define LOG_OBJECTS_DEFINE
Definition: logger.hpp:60
std::vector<::byte > bytes
Definition: Common.h:46
Definition: config.hpp:8
rocksdb::WriteBatch Batch
Definition: storage.hpp:73
EthBlockNumber PbftPeriod
Definition: types.hpp:24
std::map< uint16_t, int32_t > EfficienciesMap
Definition: sortition_params_manager.hpp:9
Definition: config.hpp:42
Definition: config.hpp:23
Definition: config.hpp:9