1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
//! Superchain Types
use crate::HardForkConfiguration;
use alloc::{string::String, vec::Vec};
use alloy_primitives::Address;
use hashbrown::HashMap;
/// Map of superchain names to their configurations.
pub type Superchains = HashMap<String, Superchain>;
/// A superchain configuration.
#[derive(Debug, Clone, Default, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct Superchain {
/// Superchain configuration file contents.
pub config: SuperchainConfig,
/// Chain IDs of chains that are part of this superchain.
pub chain_ids: Vec<u64>,
/// Superchain identifier, without capitalization or display changes.
pub superchain: String,
}
/// A superchain configuration file format
#[derive(Debug, Clone, Default, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SuperchainConfig {
/// Superchain name (e.g. "Mainnet")
pub name: String,
/// Superchain L1 anchor information
pub l1: SuperchainL1Info,
/// Optional addresses for the superchain-wide default protocol versions contract.
pub protocol_versions_addr: Option<Address>,
/// Optional address for the superchain-wide default superchain config contract.
pub superchain_config_addr: Option<Address>,
/// Hardfork Configuration. These values may be overridden by individual chains.
#[cfg_attr(feature = "serde", serde(flatten))]
pub hardfork_defaults: HardForkConfiguration,
}
/// Superchain L1 anchor information
#[derive(Debug, Clone, Default, Hash, Eq, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
pub struct SuperchainL1Info {
/// L1 chain ID
pub chain_id: u64,
/// L1 chain public RPC endpoint
pub public_rpc: String,
/// L1 chain explorer RPC endpoint
pub explorer: String,
}
/// Level of integration with the superchain.
#[derive(Debug, Clone, Default, Hash, Eq, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde_repr::Serialize_repr, serde_repr::Deserialize_repr)
)]
#[repr(u8)]
pub enum SuperchainLevel {
/// Frontier chains are chains with customizations beyond the
/// standard OP Stack configuration and are considered "advanced".
Frontier = 1,
/// Standard chains don't have any customizations beyond the
/// standard OP Stack configuration and are considered "vanilla".
#[default]
Standard = 2,
}