TARAXA
Loading...
Searching...
No Matches
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
11namespace taraxa {
12
16class TransactionManager;
17class KeyManager;
18class DagManager;
19struct FullNodeConfig;
20
21namespace final_chain {
22class FinalChain;
23}
24
35 public:
37 NodeDagProposerData(const WalletConfig& wallet, const uint16_t max_tries, const uint16_t shard)
38 : wallet(wallet),
39 max_num_tries(max_tries + (wallet.node_addr[0] % (10 * max_tries))),
40 trx_shard(std::stoull(wallet.node_addr.toString().substr(0, 6).c_str(), NULL, 16) % shard) {}
41
43
44 // Add a random component in proposing stale blocks so that not all nodes propose stale blocks at the same time
45 // This will make stale block be proposed after waiting random interval between 2 and 20 seconds
46 const uint16_t max_num_tries;
47 const uint16_t trx_shard;
48
49 uint16_t num_tries{0};
50 uint64_t last_propose_level{0};
51 };
52
53 public:
54 DagBlockProposer(const FullNodeConfig& config, std::shared_ptr<DagManager> dag_mgr,
55 std::shared_ptr<TransactionManager> trx_mgr, std::shared_ptr<final_chain::FinalChain> final_chain,
56 std::shared_ptr<DbStorage> db, std::shared_ptr<KeyManager> key_manager);
62
66 void start();
67
71 void stop();
72
79 bool proposeDagBlock(const std::shared_ptr<NodeDagProposerData>& node_dag_proposer_data);
80
86 void setNetwork(std::weak_ptr<Network> network);
87
92
101 vec_blk_t selectDagBlockTips(const vec_blk_t& frontier_tips, uint64_t gas_limit) const;
102
103 private:
113 std::shared_ptr<DagBlock> createDagBlock(DagFrontier&& frontier, level_t level, const SharedTransactions& trxs,
114 std::vector<uint64_t>&& estimations, VdfSortition&& vdf,
115 const dev::Secret& node_secret) const;
116
124 std::pair<SharedTransactions, std::vector<uint64_t>> getShardedTrxs(PbftPeriod proposal_period, uint64_t weight_limit,
125 const uint16_t node_trx_shard) const;
126
133 level_t getProposeLevel(blk_hash_t const& pivot, vec_blk_t const& tips) const;
134
141 bool isValidDposProposer(PbftPeriod propose_period, const addr_t& node_addr) const;
142
143 private:
144 const uint16_t max_num_tries_{20}; // Wait 2000(ms)
145 // uint16_t num_tries_{0};
146 // uint64_t last_propose_level_{0};
148
149 std::atomic<uint64_t> proposed_blocks_count_{0};
150 std::atomic<bool> stopped_{true};
151
152 const uint16_t total_trx_shards_;
153
154 std::shared_ptr<DagManager> dag_mgr_;
155 std::shared_ptr<TransactionManager> trx_mgr_;
156 std::shared_ptr<final_chain::FinalChain> final_chain_;
157 std::shared_ptr<KeyManager> key_manager_;
158 std::shared_ptr<DbStorage> db_;
159 std::vector<std::thread> proposer_workers_;
160 std::weak_ptr<Network> network_;
161
162 std::vector<std::shared_ptr<NodeDagProposerData>> nodes_dag_proposers_data_;
163
164 const uint64_t kDagProposeGasLimit;
165 const uint64_t kPbftGasLimit;
166 const uint64_t kDagGasLimit;
167
169 const uint64_t kValidatorMaxVote;
170 const uint64_t kShardProposePeriodInterval = 10;
171
173};
174
179} // namespace taraxa
Definition thread_pool.hpp:7
Definition sortition.hpp:13
void start()
Start the worker thread proposing new DAG blocks.
Definition dag_block_proposer.cpp:202
std::shared_ptr< DagBlock > createDagBlock(DagFrontier &&frontier, level_t level, const SharedTransactions &trxs, std::vector< uint64_t > &&estimations, VdfSortition &&vdf, const dev::Secret &node_secret) const
Creates a new block with provided data.
Definition dag_block_proposer.cpp:358
std::vector< std::thread > proposer_workers_
Definition dag_block_proposer.hpp:159
void stop()
Stop the worker thread.
Definition dag_block_proposer.cpp:233
DagBlockProposer & operator=(DagBlockProposer &&)=delete
~DagBlockProposer()
Definition dag_block_proposer.hpp:57
std::pair< SharedTransactions, std::vector< uint64_t > > getShardedTrxs(PbftPeriod proposal_period, uint64_t weight_limit, const uint16_t node_trx_shard) const
Gets transactions to include in the block - sharding not supported yet.
Definition dag_block_proposer.cpp:246
const uint16_t max_num_tries_
Definition dag_block_proposer.hpp:144
bool proposeDagBlock(const std::shared_ptr< NodeDagProposerData > &node_dag_proposer_data)
Tries to propose new dag block.
Definition dag_block_proposer.cpp:45
const uint64_t kShardProposePeriodInterval
Definition dag_block_proposer.hpp:170
const uint64_t kDagGasLimit
Definition dag_block_proposer.hpp:166
const uint16_t total_trx_shards_
Definition dag_block_proposer.hpp:152
std::vector< std::shared_ptr< NodeDagProposerData > > nodes_dag_proposers_data_
Definition dag_block_proposer.hpp:162
std::shared_ptr< DbStorage > db_
Definition dag_block_proposer.hpp:158
std::shared_ptr< KeyManager > key_manager_
Definition dag_block_proposer.hpp:157
std::atomic< bool > stopped_
Definition dag_block_proposer.hpp:150
const uint64_t kDagProposeGasLimit
Definition dag_block_proposer.hpp:164
std::weak_ptr< Network > network_
Definition dag_block_proposer.hpp:160
const uint64_t kValidatorMaxVote
Definition dag_block_proposer.hpp:169
util::ThreadPool executor_
Definition dag_block_proposer.hpp:147
const uint64_t kPbftGasLimit
Definition dag_block_proposer.hpp:165
DagBlockProposer(const DagBlockProposer &)=delete
DagBlockProposer(DagBlockProposer &&)=delete
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition dag_block_proposer.hpp:156
void setNetwork(std::weak_ptr< Network > network)
Sets network.
Definition dag_block_proposer.cpp:395
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:303
std::shared_ptr< TransactionManager > trx_mgr_
Definition dag_block_proposer.hpp:155
std::atomic< uint64_t > proposed_blocks_count_
Definition dag_block_proposer.hpp:149
bool isValidDposProposer(PbftPeriod propose_period, const addr_t &node_addr) const
Checks if node is valid proposer for provided level.
Definition dag_block_proposer.cpp:380
DagBlockProposer & operator=(const DagBlockProposer &)=delete
uint64_t getProposedBlocksCount() const
Definition dag_block_proposer.hpp:91
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:282
std::shared_ptr< DagManager > dag_mgr_
Definition dag_block_proposer.hpp:154
const HardforksConfig kHardforks
Definition dag_block_proposer.hpp:168
DagBlockProposer class proposes new DAG blocks using transactions retrieved from TransactionManager.
Definition dag_block_proposer.hpp:34
#define LOG_OBJECTS_DEFINE
Definition logger.hpp:60
std::hash for asio::adress
Definition FixedHash.h:483
Definition app.hpp:16
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:86
uint64_t level_t
Definition types.hpp:46
Definition dag_block_proposer.hpp:36
uint16_t num_tries
Definition dag_block_proposer.hpp:49
const uint16_t max_num_tries
Definition dag_block_proposer.hpp:46
uint64_t last_propose_level
Definition dag_block_proposer.hpp:50
NodeDagProposerData(const WalletConfig &wallet, const uint16_t max_tries, const uint16_t shard)
Definition dag_block_proposer.hpp:37
const WalletConfig wallet
Definition dag_block_proposer.hpp:42
const uint16_t trx_shard
Definition dag_block_proposer.hpp:47
Definition dag_block.hpp:122
Definition config.hpp:40
Definition hardfork.hpp:114
Definition config.hpp:22