29class DagManager :
public std::enable_shared_from_this<DagManager> {
49 std::shared_ptr<PbftChain> pbft_chain, std::shared_ptr<final_chain::FinalChain> final_chain,
50 std::shared_ptr<DbStorage> db, std::shared_ptr<KeyManager> key_manager);
80 std::pair<VerifyBlockReturnType, SharedTransactions>
verifyBlock(
81 const std::shared_ptr<DagBlock> &blk,
82 const std::unordered_map<
trx_hash_t, std::shared_ptr<Transaction>> &trxs = {});
98 std::pair<bool, std::vector<blk_hash_t>>
addDagBlock(
const std::shared_ptr<DagBlock> &blk,
145 void drawGraph(std::string
const &dotfile)
const;
153 std::shared_lock lock(
mutex_);
157 std::shared_lock lock(
mutex_);
168 const std::pair<PbftPeriod, std::map<uint64_t, std::unordered_set<blk_hash_t>>>
getNonFinalizedBlocks()
const;
177 const std::tuple<PbftPeriod, std::vector<std::shared_ptr<DagBlock>>,
SharedTransactions>
242 bool finalized =
false);
244 std::unordered_map<
blk_hash_t, std::shared_ptr<DagBlock>> &expired_dag_blocks_to_remove);
247 std::pair<blk_hash_t, std::vector<blk_hash_t>>
getFrontier()
const;
257 std::shared_ptr<DbStorage>
db_;
blk_hash_t old_anchor_
Definition dag_manager.hpp:260
uint64_t getDagExpiryLevel()
Retrieves Dag expiry level.
Definition dag_manager.hpp:217
uint setDagBlockOrder(blk_hash_t const &anchor, PbftPeriod period, vec_blk_t const &dag_order)
Sets the dag block order on finalizing PBFT block IMPORTANT: This method is invoked on finalizing a p...
Definition dag_manager.cpp:354
void handleExpiredDagBlocksTransactions(const std::vector< trx_hash_t > &transactions_from_expired_dag_blocks) const
Definition dag_manager.cpp:460
const uint32_t max_levels_per_period_
Definition dag_manager.hpp:268
const uint64_t kValidatorMaxVote
Definition dag_manager.hpp:282
void clearLightNodeHistory(uint64_t light_node_history)
Clears light node history.
Definition dag_manager.cpp:318
DagManager(DagManager &&)=delete
std::shared_ptr< PivotTree > pivot_tree_
Definition dag_manager.hpp:252
std::shared_ptr< KeyManager > key_manager_
Definition dag_manager.hpp:258
std::shared_ptr< TransactionManager > trx_mgr_
Definition dag_manager.hpp:254
bool validateBlockNotExpired(const std::shared_ptr< DagBlock > &dag_block, std::unordered_map< blk_hash_t, std::shared_ptr< DagBlock > > &expired_dag_blocks_to_remove)
Definition dag_manager.cpp:484
void setNetwork(std::weak_ptr< Network > network)
Definition dag_manager.hpp:59
VerifyBlockReturnType
return type of verifyBlock
Definition dag_manager.hpp:34
@ IncorrectTransactionsEstimation
std::weak_ptr< Network > network_
Definition dag_manager.hpp:256
std::shared_ptr< PbftChain > pbft_chain_
Definition dag_manager.hpp:255
void drawGraph(std::string const &dotfile) const
Definition dag_manager.cpp:207
std::pair< uint64_t, uint64_t > getNumEdgesInDag() const
Definition dag_manager.cpp:76
bool isDagBlockKnown(const blk_hash_t &hash) const
Definition dag_manager.cpp:843
void updateFrontier()
Definition dag_manager.cpp:249
void drawTotalGraph(std::string const &str) const
Definition dag_manager.cpp:81
std::shared_ptr< Dag > total_dag_
Definition dag_manager.hpp:253
std::pair< VerifyBlockReturnType, SharedTransactions > verifyBlock(const std::shared_ptr< DagBlock > &blk, const std::unordered_map< trx_hash_t, std::shared_ptr< Transaction > > &trxs={})
Verifies new DAG block.
Definition dag_manager.cpp:667
blk_hash_t anchor_
Definition dag_manager.hpp:259
void drawPivotGraph(std::string const &str) const
Definition dag_manager.cpp:86
static dev::bytes getVdfMessage(blk_hash_t const &hash, SharedTransactions const &trxs)
Retrieves VDF message from block hash and transactions.
Definition dag_manager.cpp:863
std::shared_mutex order_dag_blocks_mutex_
Definition dag_manager.hpp:251
const uint32_t dag_expiry_limit_
Definition dag_manager.hpp:269
DagManager & operator=(const DagManager &)=delete
std::shared_mutex & getDagMutex()
Retrieves Dag Manager mutex, only to be used when finalizing pbft block.
Definition dag_manager.hpp:196
std::pair< blk_hash_t, blk_hash_t > getAnchors() const
Definition dag_manager.hpp:156
std::atomic_uint64_t dag_expiry_level_
Definition dag_manager.hpp:273
DagManager & operator=(DagManager &&)=delete
std::pair< size_t, size_t > getNonFinalizedBlocksSize() const
Definition dag_manager.cpp:656
const uint32_t cache_delete_step_
Definition dag_manager.hpp:278
const DagConfig & getDagConfig() const
Retrieves Dag config.
Definition dag_manager.hpp:210
std::shared_ptr< DbStorage > db_
Definition dag_manager.hpp:257
logger::Logger logger_
Definition dag_manager.hpp:284
SortitionParamsManager sortition_params_manager_
Definition dag_manager.hpp:265
std::shared_mutex mutex_
Definition dag_manager.hpp:250
std::map< uint64_t, std::unordered_set< blk_hash_t > > non_finalized_blks_
Definition dag_manager.hpp:262
std::pair< uint64_t, uint64_t > getNumVerticesInDag() const
Definition dag_manager.cpp:71
DagManager(const DagManager &)=delete
std::shared_ptr< DagManager > getShared()
Definition dag_manager.cpp:62
DagFrontier frontier_
Definition dag_manager.hpp:264
PbftPeriod period_
Definition dag_manager.hpp:261
std::atomic< level_t > max_level_
Definition dag_manager.hpp:249
level_t getMaxLevel() const
Definition dag_manager.hpp:149
SortitionParamsManager & sortitionParamsManager()
Retrieves sortition manager.
Definition dag_manager.hpp:203
std::shared_ptr< DagBlock > getDagBlock(const blk_hash_t &hash) const
Gets dag block from either local memory cache or db.
Definition dag_manager.cpp:851
const GenesisConfig kGenesis
Definition dag_manager.hpp:281
const std::shared_ptr< DagBlock > genesis_block_
Definition dag_manager.hpp:267
PbftPeriod getLatestPeriod() const
Definition dag_manager.hpp:152
uint32_t non_finalized_blks_min_difficulty_
Definition dag_manager.hpp:263
DagFrontier getDagFrontier()
Definition dag_manager.cpp:139
std::vector< blk_hash_t > getGhostPath() const
Retrieves ghost path which is ordered list of non finalized pivot blocks for last anchor.
Definition dag_manager.cpp:268
ExpirationCacheMap< blk_hash_t, std::shared_ptr< DagBlock > > seen_blocks_
Definition dag_manager.hpp:279
std::pair< bool, std::vector< blk_hash_t > > addDagBlock(const std::shared_ptr< DagBlock > &blk, SharedTransactions &&trxs={}, bool proposed=false, bool save=true)
adds verified DAG block in the DAG
Definition dag_manager.cpp:144
std::shared_ptr< final_chain::FinalChain > final_chain_
Definition dag_manager.hpp:280
uint32_t getDagExpiryLimit() const
Retrieves Dag expiry limit.
Definition dag_manager.hpp:166
const std::tuple< PbftPeriod, std::vector< std::shared_ptr< DagBlock > >, SharedTransactions > getNonFinalizedBlocksWithTransactions(const std::unordered_set< blk_hash_t > &known_hashes) const
Retrieves current period together with non finalized blocks with the unique list of non finalized tra...
Definition dag_manager.cpp:620
void recoverDag()
Definition dag_manager.cpp:511
const uint32_t cache_max_size_
Definition dag_manager.hpp:277
util::Event< DagManager, std::shared_ptr< DagBlock > > const block_verified_
Definition dag_manager.hpp:189
vec_blk_t getDagBlockOrder(blk_hash_t const &anchor, PbftPeriod period)
Retrieves DAG block order for specified anchor. Order should always be the same for the same anchor i...
Definition dag_manager.cpp:275
uint32_t getNonFinalizedBlocksMinDifficulty() const
Definition dag_manager.cpp:651
void addToDag(blk_hash_t const &hash, blk_hash_t const &pivot, std::vector< blk_hash_t > const &tips, uint64_t level, bool finalized=false)
Definition dag_manager.cpp:213
std::pair< bool, std::vector< blk_hash_t > > pivotAndTipsAvailable(const std::shared_ptr< DagBlock > &blk)
Checks if block pivot and tips are in DAG.
Definition dag_manager.cpp:91
const DagConfig & dag_config_
Definition dag_manager.hpp:266
std::pair< blk_hash_t, std::vector< blk_hash_t > > getFrontier() const
Definition dag_manager.cpp:233
const std::pair< PbftPeriod, std::map< uint64_t, std::unordered_set< blk_hash_t > > > getNonFinalizedBlocks() const
Definition dag_manager.cpp:613
std::optional< std::pair< blk_hash_t, std::vector< blk_hash_t > > > getLatestPivotAndTips() const
Definition dag_manager.cpp:228
DagManager class contains in memory representation of part of the DAG that is not yet finalized in a ...
Definition dag_manager.hpp:29
SortitionParamsManager class calculates DAG efficiency and makes VDF difficulty adjustments.
Definition sortition_params_manager.hpp:36
std::vector<::byte > bytes
Definition Common.h:46
std::shared_ptr< spdlog::logger > Logger
Definition logging.hpp:12
std::vector< blk_hash_t > vec_blk_t
Definition types.hpp:50
uint256_hash_t blk_hash_t
Definition types.hpp:43
EthBlockNumber PbftPeriod
Definition types.hpp:25
std::vector< SharedTransaction > SharedTransactions
Definition transaction.hpp:86
uint64_t level_t
Definition types.hpp:47
Definition dag_config.hpp:17
Definition dag_block.hpp:124
Definition genesis.hpp:23