diem_config/config/
consensus_config.rs1use crate::config::SafetyRulesConfig;
9use diem_types::{
10 account_address::AccountAddress, block_info::Round,
11 validator_verifier::ValidatorVerifier,
12};
13use serde::{Deserialize, Serialize};
14use std::{
15 collections::{BTreeMap, HashMap},
16 path::PathBuf,
17};
18
19#[derive(Clone, Debug, Deserialize, PartialEq, Serialize)]
20#[serde(default, deny_unknown_fields)]
21pub struct ConsensusConfig {
22 pub contiguous_rounds: u32,
23 pub max_block_size: u64,
24 pub max_pruned_blocks_in_mem: usize,
25 pub mempool_commit_timeout_ms: u64,
28 pub mempool_txn_pull_timeout_ms: u64,
31 pub round_initial_timeout_ms: u64,
32 pub cip113_round_initial_timeout_ms: u64,
33 pub cip113_transition_epoch: u64,
34
35 pub proposer_type: ConsensusProposerType,
36 pub safety_rules: SafetyRulesConfig,
37 pub sync_only: bool,
41 pub mempool_poll_count: u64,
43
44 pub hardcoded_epoch_committee: BTreeMap<u64, ValidatorVerifier>,
45}
46
47impl Default for ConsensusConfig {
48 fn default() -> ConsensusConfig {
49 ConsensusConfig {
50 contiguous_rounds: 2,
51 max_block_size: 1000,
52 max_pruned_blocks_in_mem: 100,
53 mempool_commit_timeout_ms: 5000,
54 mempool_txn_pull_timeout_ms: 5000,
55 round_initial_timeout_ms: 60_000,
58 cip113_round_initial_timeout_ms: 30_000,
59 cip113_transition_epoch: u64::MAX,
60 proposer_type: ConsensusProposerType::VrfProposer,
61 safety_rules: SafetyRulesConfig::default(),
62 sync_only: false,
63 mempool_poll_count: 1,
64 hardcoded_epoch_committee: Default::default(),
65 }
66 }
67}
68
69impl ConsensusConfig {
70 pub fn set_data_dir(&mut self, data_dir: PathBuf) {
71 self.safety_rules.set_data_dir(data_dir);
72 }
73}
74
75#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
76#[serde(rename_all = "snake_case", tag = "type")]
77pub enum ConsensusProposerType {
78 FixedProposer,
80 RotatingProposer,
82 RoundProposer(HashMap<Round, AccountAddress>),
86 VrfProposer,
88}