espresso_types/v0/v0_1/
instance_state.rs1use std::fmt::Debug;
2
3use serde::{Deserialize, Serialize};
4
5use crate::{v0::utils::Timestamp, v0_3::ChainConfig};
6
7#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
9#[serde(rename_all = "snake_case")]
10pub enum UpgradeType {
11 Fee { chain_config: ChainConfig },
12 Epoch { chain_config: ChainConfig },
13 DrbAndHeader { chain_config: ChainConfig },
14 NewProtocol { chain_config: ChainConfig },
15 EpochReward { chain_config: ChainConfig },
16 LargeBlock { chain_config: ChainConfig },
17}
18
19impl UpgradeType {
20 pub fn chain_config(&self) -> Option<ChainConfig> {
23 match self {
24 UpgradeType::Fee { chain_config } => Some(*chain_config),
25 UpgradeType::Epoch { chain_config } => Some(*chain_config),
26 UpgradeType::DrbAndHeader { chain_config } => Some(*chain_config),
27 UpgradeType::NewProtocol { chain_config } => Some(*chain_config),
28 UpgradeType::EpochReward { chain_config } => Some(*chain_config),
29 UpgradeType::LargeBlock { chain_config } => Some(*chain_config),
30 }
31 }
32}
33
34#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
36pub struct TimeBasedUpgrade {
37 pub start_proposing_time: Timestamp,
39 pub stop_proposing_time: Timestamp,
41 pub start_voting_time: Option<Timestamp>,
43 pub stop_voting_time: Option<Timestamp>,
45}
46
47#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
49pub struct ViewBasedUpgrade {
50 pub start_proposing_view: u64,
52 pub stop_proposing_view: u64,
54 pub start_voting_view: Option<u64>,
56 pub stop_voting_view: Option<u64>,
58}
59
60#[derive(Clone, Debug, PartialEq, Eq, Deserialize, Serialize)]
62#[serde(untagged)]
63pub enum UpgradeMode {
64 Time(TimeBasedUpgrade),
66 View(ViewBasedUpgrade),
68}
69
70#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
72pub struct Upgrade {
73 pub mode: UpgradeMode,
75 pub upgrade_type: UpgradeType,
77}
78
79#[derive(Clone, Copy, Debug)]
80pub struct NoStorage;