revm_statetest_types/
spec.rs

1use revm::specification::hardfork::SpecId;
2use serde::Deserialize;
3
4/// Ethereum specification names
5#[derive(Debug, PartialEq, Eq, PartialOrd, Ord, Deserialize, Hash)]
6pub enum SpecName {
7    Frontier,
8    FrontierToHomesteadAt5,
9    Homestead,
10    HomesteadToDaoAt5,
11    HomesteadToEIP150At5,
12    EIP150,
13    EIP158, // EIP-161: State trie clearing
14    EIP158ToByzantiumAt5,
15    Byzantium,
16    ByzantiumToConstantinopleAt5, // SKIPPED
17    ByzantiumToConstantinopleFixAt5,
18    Constantinople, // SKIPPED
19    ConstantinopleFix,
20    Istanbul,
21    Berlin,
22    BerlinToLondonAt5,
23    London,
24    Paris,
25    Merge,
26    Shanghai,
27    Cancun,
28    Prague,
29    Osaka, // SKIPPED
30    #[serde(other)]
31    Unknown,
32}
33
34impl SpecName {
35    /// Converts to a [SpecId].
36    pub fn to_spec_id(&self) -> SpecId {
37        match self {
38            Self::Frontier => SpecId::FRONTIER,
39            Self::Homestead | Self::FrontierToHomesteadAt5 => SpecId::HOMESTEAD,
40            Self::EIP150 | Self::HomesteadToDaoAt5 | Self::HomesteadToEIP150At5 => {
41                SpecId::TANGERINE
42            }
43            Self::EIP158 => SpecId::SPURIOUS_DRAGON,
44            Self::Byzantium | Self::EIP158ToByzantiumAt5 => SpecId::BYZANTIUM,
45            Self::ConstantinopleFix | Self::ByzantiumToConstantinopleFixAt5 => SpecId::PETERSBURG,
46            Self::Istanbul => SpecId::ISTANBUL,
47            Self::Berlin => SpecId::BERLIN,
48            Self::London | Self::BerlinToLondonAt5 => SpecId::LONDON,
49            Self::Paris | Self::Merge => SpecId::MERGE,
50            Self::Shanghai => SpecId::SHANGHAI,
51            Self::Cancun => SpecId::CANCUN,
52            Self::Prague => SpecId::PRAGUE,
53            Self::Osaka => SpecId::OSAKA,
54            Self::ByzantiumToConstantinopleAt5 | Self::Constantinople => {
55                panic!("Overridden with PETERSBURG")
56            }
57            Self::Unknown => panic!("Unknown spec"),
58        }
59    }
60}