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/logging.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
78 bool proposeDagBlock();
79
85 void setNetwork(std::weak_ptr<Network> network);
86
91
100 vec_blk_t selectDagBlockTips(const vec_blk_t& frontier_tips, uint64_t gas_limit) const;
101
102 private:
112 std::shared_ptr<DagBlock> createDagBlock(DagFrontier&& frontier, level_t level, const SharedTransactions& trxs,
113 std::vector<uint64_t>&& estimations, VdfSortition&& vdf,
114 const dev::Secret& node_secret) const;
115
123 std::pair<SharedTransactions, std::vector<uint64_t>> getShardedTrxs(PbftPeriod proposal_period, uint64_t weight_limit,
124 const uint16_t node_trx_shard) const;
125
132 level_t getProposeLevel(blk_hash_t const& pivot, vec_blk_t const& tips) const;
133
140 bool isValidDposProposer(PbftPeriod propose_period, const addr_t& node_addr) const;
141
142 private:
143 const uint16_t max_num_tries_{20}; // Wait 2000(ms)
144 // uint16_t num_tries_{0};
145 // uint64_t last_propose_level_{0};
147
148 std::atomic<uint64_t> proposed_blocks_count_{0};
149 std::atomic<bool> stopped_{true};
150
151 const uint16_t total_trx_shards_;
152
153 std::shared_ptr<DagManager> dag_mgr_;
154 std::shared_ptr<TransactionManager> trx_mgr_;
155 std::shared_ptr<final_chain::FinalChain> final_chain_;
156 std::shared_ptr<KeyManager> key_manager_;
157 std::shared_ptr<DbStorage> db_;
158 std::shared_ptr<std::thread> proposer_worker_;
159 std::weak_ptr<Network> network_;
160
161 std::vector<NodeDagProposerData> nodes_dag_proposers_data_;
162
163 const uint64_t kDagProposeGasLimit;
164 const uint64_t kPbftGasLimit;
165 const uint64_t kDagGasLimit;
166
168 const uint64_t kValidatorMaxVote;
169 const uint64_t kShardProposePeriodInterval = 10;
170
172};
173
178} // namespace taraxa
Definition thread_pool.hpp:7
Definition sortition.hpp:13
bool proposeDagBlock()
Tries to propose new dag block.
Definition dag_block_proposer.cpp:38
void start()
Start the worker thread proposing new DAG blocks.
Definition dag_block_proposer.cpp:210
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:360
void stop()
Stop the worker thread.
Definition dag_block_proposer.cpp:239
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:248
const uint16_t max_num_tries_
Definition dag_block_proposer.hpp:143
const uint64_t kShardProposePeriodInterval
Definition dag_block_proposer.hpp:169
const uint64_t kDagGasLimit
Definition dag_block_proposer.hpp:165
const uint16_t total_trx_shards_
Definition dag_block_proposer.hpp:151
std::shared_ptr< DbStorage > db_
Definition dag_block_proposer.hpp:157
std::shared_ptr< KeyManager > key_manager_
Definition dag_block_proposer.hpp:156
std::atomic< bool > stopped_
Definition dag_block_proposer.hpp:149
const uint64_t kDagProposeGasLimit
Definition dag_block_proposer.hpp:163
logger::Logger logger_
Definition dag_block_proposer.hpp:171
std::vector< NodeDagProposerData > nodes_dag_proposers_data_
Definition dag_block_proposer.hpp:161
std::weak_ptr< Network > network_
Definition dag_block_proposer.hpp:159
const uint64_t kValidatorMaxVote
Definition dag_block_proposer.hpp:168
util::ThreadPool executor_
Definition dag_block_proposer.hpp:146
const uint64_t kPbftGasLimit
Definition dag_block_proposer.hpp:164
DagBlockProposer(const DagBlockProposer &)=delete
DagBlockProposer(DagBlockProposer &&)=delete
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition dag_block_proposer.hpp:155
void setNetwork(std::weak_ptr< Network > network)
Sets network.
Definition dag_block_proposer.cpp:397
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:305
std::shared_ptr< TransactionManager > trx_mgr_
Definition dag_block_proposer.hpp:154
std::atomic< uint64_t > proposed_blocks_count_
Definition dag_block_proposer.hpp:148
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:382
DagBlockProposer & operator=(const DagBlockProposer &)=delete
std::shared_ptr< std::thread > proposer_worker_
Definition dag_block_proposer.hpp:158
uint64_t getProposedBlocksCount() const
Definition dag_block_proposer.hpp:90
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:284
std::shared_ptr< DagManager > dag_mgr_
Definition dag_block_proposer.hpp:153
const HardforksConfig kHardforks
Definition dag_block_proposer.hpp:167
DagBlockProposer class proposes new DAG blocks using transactions retrieved from TransactionManager.
Definition dag_block_proposer.hpp:34
std::hash for asio::adress
Definition FixedHash.h:483
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
Definition app.hpp:16
std::vector< blk_hash_t > vec_blk_t
Definition types.hpp:50
EthBlockNumber PbftPeriod
Definition types.hpp:25
std::vector< SharedTransaction > SharedTransactions
Definition transaction.hpp:86
uint64_t level_t
Definition types.hpp:47
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:124
Definition config.hpp:41
Definition hardfork.hpp:114
Definition config.hpp:23