diem_config/config/
consensus_config.rs1use crate::config::SafetyRulesConfig;
9use diem_types::{
10 account_address::AccountAddress, block_info::Round, chain_id::ChainId,
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_executed_txn_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 chain_id: ChainId,
45
46 pub hardcoded_epoch_committee: BTreeMap<u64, ValidatorVerifier>,
47}
48
49impl Default for ConsensusConfig {
50 fn default() -> ConsensusConfig {
51 ConsensusConfig {
52 contiguous_rounds: 2,
53 max_block_size: 1000,
54 max_pruned_blocks_in_mem: 100,
55 mempool_txn_pull_timeout_ms: 5000,
56 mempool_executed_txn_timeout_ms: 1000,
57 round_initial_timeout_ms: 60_000,
60 cip113_round_initial_timeout_ms: 30_000,
61 cip113_transition_epoch: u64::MAX,
62 proposer_type: ConsensusProposerType::VrfProposer,
63 safety_rules: SafetyRulesConfig::default(),
64 sync_only: false,
65 mempool_poll_count: 1,
66 chain_id: Default::default(),
67 hardcoded_epoch_committee: Default::default(),
68 }
69 }
70}
71
72impl ConsensusConfig {
73 pub fn set_data_dir(&mut self, data_dir: PathBuf) {
74 self.safety_rules.set_data_dir(data_dir);
75 }
76}
77
78#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
79#[serde(rename_all = "snake_case", tag = "type")]
80pub enum ConsensusProposerType {
81 FixedProposer,
83 RotatingProposer,
85 RoundProposer(HashMap<Round, AccountAddress>),
89 VrfProposer,
91}
92
93#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize)]
94#[serde(deny_unknown_fields)]
95pub struct LeaderReputationConfig {
96 pub active_weights: u64,
97 pub inactive_weights: u64,
98}