op_alloy_registry/
chain_list.rs1use alloc::{string::String, vec::Vec};
4
5#[derive(Debug, Clone, Default, Hash, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
7pub struct ChainList {
8 pub chains: Vec<Chain>,
10}
11
12#[derive(Debug, Clone, Default, Hash, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
14#[serde(rename_all = "camelCase")]
15pub struct Chain {
16 pub name: String,
18 pub identifier: String,
20 pub chain_id: u64,
22 pub rpc: Vec<String>,
24 pub explorers: Vec<String>,
26 pub superchain_level: u64,
28 pub data_availability_type: String,
30 pub parent: SuperchainParent,
32}
33
34#[derive(Debug, Clone, Default, Hash, Eq, PartialEq, serde::Serialize, serde::Deserialize)]
36#[serde(rename_all = "camelCase")]
37pub struct SuperchainParent {
38 pub r#type: String,
40 pub chain: String,
42}
43
44impl SuperchainParent {
45 pub fn chain_id(&self) -> u64 {
47 match self.chain.as_ref() {
48 "mainnet" => 1,
49 "sepolia" => 11155111,
50 "sepolia-dev-0" => 11155421,
51 _ => 10,
52 }
53 }
54}
55
56#[cfg(test)]
57mod tests {
58 use super::*;
59
60 #[test]
61 fn read_chain_list_file() {
62 let chain_list = include_str!("../etc/chainList.json");
63 let chains: Vec<Chain> = serde_json::from_str(chain_list).unwrap();
64 let base_chain = chains.iter().find(|c| c.name == "Base").unwrap();
65 assert_eq!(base_chain.chain_id, 8453);
66 }
67}