TARAXA
dag_block_proposer.hpp
Go to the documentation of this file.
1 #pragma once
2 
3 #include <atomic>
4 #include <thread>
5 #include <vector>
6 
7 #include "dag/dag_block.hpp"
8 #include "logger/logger.hpp"
9 #include "network/network.hpp"
10 
11 namespace taraxa {
12 
16 class TransactionManager;
17 class KeyManager;
18 class DagManager;
19 struct FullNodeConfig;
20 
21 namespace final_chain {
22 class FinalChain;
23 }
24 
35  public:
36  DagBlockProposer(const FullNodeConfig& config, std::shared_ptr<DagManager> dag_mgr,
37  std::shared_ptr<TransactionManager> trx_mgr, std::shared_ptr<final_chain::FinalChain> final_chain,
38  std::shared_ptr<DbStorage> db, std::shared_ptr<KeyManager> key_manager);
44 
48  void start();
49 
53  void stop();
54 
60  bool proposeDagBlock();
61 
67  void setNetwork(std::weak_ptr<Network> network);
68 
72  uint64_t getProposedBlocksCount() const { return proposed_blocks_count_; }
73 
82  vec_blk_t selectDagBlockTips(const vec_blk_t& frontier_tips, uint64_t gas_limit) const;
83 
84  private:
93  DagBlock createDagBlock(DagFrontier&& frontier, level_t level, const SharedTransactions& trxs,
94  std::vector<uint64_t>&& estimations, VdfSortition&& vdf) const;
95 
102  std::pair<SharedTransactions, std::vector<uint64_t>> getShardedTrxs(PbftPeriod proposal_period,
103  uint64_t weight_limit) const;
104 
111  level_t getProposeLevel(blk_hash_t const& pivot, vec_blk_t const& tips) const;
112 
118  bool isValidDposProposer(PbftPeriod propose_period) const;
119 
120  private:
121  uint16_t max_num_tries_{20}; // Wait 2000(ms)
122  uint16_t num_tries_{0};
123  uint64_t last_propose_level_{0};
125 
126  std::atomic<uint64_t> proposed_blocks_count_{0};
127  std::atomic<bool> stopped_{true};
128 
130  const uint16_t total_trx_shards_;
131  uint16_t my_trx_shard_;
132 
133  std::shared_ptr<DagManager> dag_mgr_;
134  std::shared_ptr<TransactionManager> trx_mgr_;
135  std::shared_ptr<final_chain::FinalChain> final_chain_;
136  std::shared_ptr<KeyManager> key_manager_;
137  std::shared_ptr<DbStorage> db_;
138  std::shared_ptr<std::thread> proposer_worker_;
139  std::weak_ptr<Network> network_;
140 
145 
146  const uint64_t kPbftGasLimit;
147  const uint64_t kDagGasLimit;
148 
150  const uint64_t kValidatorMaxVote;
151 
153 };
154 
159 } // namespace taraxa
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:9
Definition: sortition.hpp:13
bool proposeDagBlock()
Tries to propose new dag block.
Definition: dag_block_proposer.cpp:47
void start()
Start the worker thread proposing new DAG blocks.
Definition: dag_block_proposer.cpp:174
void stop()
Stop the worker thread.
Definition: dag_block_proposer.cpp:203
uint16_t num_tries_
Definition: dag_block_proposer.hpp:122
~DagBlockProposer()
Definition: dag_block_proposer.hpp:39
std::pair< SharedTransactions, std::vector< uint64_t > > getShardedTrxs(PbftPeriod proposal_period, uint64_t weight_limit) const
Gets transactions to include in the block - sharding not supported yet.
Definition: dag_block_proposer.cpp:212
uint64_t last_propose_level_
Definition: dag_block_proposer.hpp:123
const DagBlockProposerConfig bp_config_
Definition: dag_block_proposer.hpp:129
DagBlockProposer & operator=(DagBlockProposer &&)=delete
const uint64_t kDagGasLimit
Definition: dag_block_proposer.hpp:147
const uint16_t total_trx_shards_
Definition: dag_block_proposer.hpp:130
std::shared_ptr< DbStorage > db_
Definition: dag_block_proposer.hpp:137
DagBlockProposer & operator=(const DagBlockProposer &)=delete
DagBlock createDagBlock(DagFrontier &&frontier, level_t level, const SharedTransactions &trxs, std::vector< uint64_t > &&estimations, VdfSortition &&vdf) const
Creates a new block with provided data.
Definition: dag_block_proposer.cpp:323
std::shared_ptr< KeyManager > key_manager_
Definition: dag_block_proposer.hpp:136
std::atomic< bool > stopped_
Definition: dag_block_proposer.hpp:127
uint16_t my_trx_shard_
Definition: dag_block_proposer.hpp:131
std::weak_ptr< Network > network_
Definition: dag_block_proposer.hpp:139
const vrf_wrapper::vrf_sk_t vrf_sk_
Definition: dag_block_proposer.hpp:143
const uint64_t kValidatorMaxVote
Definition: dag_block_proposer.hpp:150
util::ThreadPool executor_
Definition: dag_block_proposer.hpp:124
const uint64_t kPbftGasLimit
Definition: dag_block_proposer.hpp:146
bool isValidDposProposer(PbftPeriod propose_period) const
Checks if node is valid proposer for provided level.
Definition: dag_block_proposer.cpp:345
DagBlockProposer(const DagBlockProposer &)=delete
const addr_t node_addr_
Definition: dag_block_proposer.hpp:141
DagBlockProposer(DagBlockProposer &&)=delete
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition: dag_block_proposer.hpp:135
void setNetwork(std::weak_ptr< Network > network)
Sets network.
Definition: dag_block_proposer.cpp:360
vec_blk_t selectDagBlockTips(const vec_blk_t &frontier_tips, uint64_t gas_limit) const
Select tips for DagBlock proposal up to max allowed.
Definition: dag_block_proposer.cpp:268
std::shared_ptr< TransactionManager > trx_mgr_
Definition: dag_block_proposer.hpp:134
std::atomic< uint64_t > proposed_blocks_count_
Definition: dag_block_proposer.hpp:126
uint16_t max_num_tries_
Definition: dag_block_proposer.hpp:121
DagBlockProposer(const FullNodeConfig &config, std::shared_ptr< DagManager > dag_mgr, std::shared_ptr< TransactionManager > trx_mgr, std::shared_ptr< final_chain::FinalChain > final_chain, std::shared_ptr< DbStorage > db, std::shared_ptr< KeyManager > key_manager)
Definition: dag_block_proposer.cpp:14
const vrf_wrapper::vrf_pk_t vrf_pk_
Definition: dag_block_proposer.hpp:144
const secret_t node_sk_
Definition: dag_block_proposer.hpp:142
std::shared_ptr< std::thread > proposer_worker_
Definition: dag_block_proposer.hpp:138
uint64_t getProposedBlocksCount() const
Definition: dag_block_proposer.hpp:72
level_t getProposeLevel(blk_hash_t const &pivot, vec_blk_t const &tips) const
Gets current propose level for provided pivot and tips.
Definition: dag_block_proposer.cpp:247
std::shared_ptr< DagManager > dag_mgr_
Definition: dag_block_proposer.hpp:133
const HardforksConfig kHardforks
Definition: dag_block_proposer.hpp:149
DagBlockProposer class proposes new DAG blocks using transactions retrieved from TransactionManager.
Definition: dag_block_proposer.hpp:34
main responsibility is blocks execution in EVM, getting data from EVM state
Definition: final_chain.hpp:28
#define LOG_OBJECTS_DEFINE
Definition: logger.hpp:60
Definition: config.hpp:8
std::vector< blk_hash_t > vec_blk_t
Definition: types.hpp:50
EthBlockNumber PbftPeriod
Definition: types.hpp:24
std::vector< SharedTransaction > SharedTransactions
Definition: transaction.hpp:81
uint64_t level_t
Definition: types.hpp:46
Definition: dag_config.hpp:9
Definition: dag_block.hpp:120
Definition: config.hpp:24
Definition: hardfork.hpp:93