1use core::time::Duration;
2
3#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, strum::IntoStaticStr)] #[derive(strum::VariantNames)] #[derive(strum::VariantArray)] #[derive(strum::EnumString)] #[derive(strum::EnumIter)] #[derive(strum::EnumCount)] #[derive(num_enum::TryFromPrimitive)] #[repr(u64)]
12pub enum NamedChain {
13 Mainnet = 1,
14 Morden = 2,
15 Ropsten = 3,
16 Rinkeby = 4,
17 Goerli = 5,
18 Kovan = 42,
19 Holesky = 17_000,
20 Sepolia = 11_155_111,
21 Optimism = 10,
22 OptimismKovan = 69,
23 OptimismGoerli = 420,
24 OptimismSepolia = 11_155_420,
25 Arbitrum = 42_161,
26 ArbitrumTestnet = 421_611,
27 ArbitrumGoerli = 421_613,
28 ArbitrumSepolia = 421_614,
29 ArbitrumNova = 42_170,
30 Cronos = 25,
31 CronosTestnet = 338,
32 Rsk = 30,
33 BinanceSmartChain = 56,
34 BinanceSmartChainTestnet = 97,
35 Poa = 99,
36 Sokol = 77,
37 Scroll = 534_352,
38 ScrollSepolia = 534_351,
39 Metis = 1_088,
40 Gnosis = 100,
41 Polygon = 137,
42 PolygonMumbai = 80_001,
43 PolygonAmoy = 80_002,
44 PolygonZkEvm = 1_101,
45 PolygonZkEvmTestnet = 1_442,
46 Fantom = 250,
47 FantomTestnet = 4_002,
48 Moonbeam = 1_284,
49 MoonbeamDev = 1_281,
50 Moonriver = 1_285,
51 Moonbase = 1_287,
52 Dev = 1_337,
53 AnvilHardhat = 31_337,
54 Evmos = 9_001,
55 EvmosTestnet = 9_000,
56 Chiado = 10_200,
57 Oasis = 26_863,
58 Emerald = 42_262,
59 EmeraldTestnet = 42_261,
60 FilecoinMainnet = 314,
61 FilecoinCalibrationTestnet = 314_159,
62 Avalanche = 43_114,
63 AvalancheFuji = 43_113,
64 Celo = 42_220,
65 CeloAlfajores = 44_787,
66 CeloBaklava = 62_320,
67 Aurora = 1_313_161_554,
68 AuroraTestnet = 1_313_161_555,
69 Canto = 7_700,
70 CantoTestnet = 740,
71 Boba = 288,
72 Base = 8_453,
73 BaseGoerli = 84_531,
74 BaseSepolia = 84_532,
75 Syndr = 404,
76 SyndrSepolia = 444_444,
77 Shimmer = 148,
78 Fraxtal = 252,
79 FraxtalTestnet = 2_522,
80 Blast = 81_457,
81 BlastSepolia = 168_587_773,
82 Linea = 59_144,
83 LineaGoerli = 59_140,
84 ZkSync = 324,
85 ZkSyncTestnet = 280,
86 Mantle = 5_000,
87 MantleTestnet = 5_001,
88 MantleSepolia = 5_003,
89 Viction = 88,
90 Zora = 7_777_777,
91 ZoraGoerli = 999,
92 ZoraSepolia = 999_999_999,
93 Pgn = 424,
94 PgnSepolia = 58_008,
95 Mode = 34_443,
96 ModeSepolia = 919,
97 Elastos = 20,
98 KakarotSepolia = 1_802_203_764,
99 EtherlinkTestnet = 128_123,
100 Degen = 666_666_666,
101 OpBNBMainnet = 204,
102 OpBNBTestnet = 5_611,
103 Ronin = 2_020,
104 Taiko = 167_000,
105 TaikoHekla = 167_009,
106 AutonomysNovaTestnet = 490_000,
107 Flare = 14,
108 FlareCoston2 = 114,
109 Acala = 787,
110 AcalaMandalaTestnet = 595,
111 AcalaTestnet = 597,
112 Karura = 686,
113 KaruraTestnet = 596,
114}
115
116impl Default for NamedChain {
117 fn default() -> Self {
118 Self::Mainnet
119 }
120}
121
122impl AsRef<str> for NamedChain {
123 #[inline]
124 fn as_ref(&self) -> &str {
125 self.as_str()
126 }
127}
128impl NamedChain {
129 pub fn as_str(&self) -> &'static str {
130 self.into()
131 }
132
133 pub const fn average_blocktime_hint(self) -> Option<Duration> {
134 use NamedChain as C;
135
136 Some(Duration::from_millis(match self {
137 C::Mainnet | C::Taiko | C::TaikoHekla => 12_000,
138
139 C::Arbitrum
140 | C::ArbitrumTestnet
141 | C::ArbitrumGoerli
142 | C::ArbitrumSepolia
143 | C::Syndr
144 | C::SyndrSepolia
145 | C::ArbitrumNova => 260,
146
147 C::Optimism
148 | C::OptimismGoerli
149 | C::OptimismSepolia
150 | C::Base
151 | C::BaseGoerli
152 | C::BaseSepolia
153 | C::Blast
154 | C::BlastSepolia
155 | C::Fraxtal
156 | C::FraxtalTestnet
157 | C::Zora
158 | C::ZoraGoerli
159 | C::ZoraSepolia
160 | C::Mantle
161 | C::MantleSepolia
162 | C::Mode
163 | C::ModeSepolia
164 | C::Pgn
165 | C::PgnSepolia => 2_000,
166
167 C::Viction => 2_000,
168
169 C::Polygon | C::PolygonMumbai | C::PolygonAmoy => 2_100,
170
171 C::Acala
172 | C::AcalaMandalaTestnet
173 | C::AcalaTestnet
174 | C::Karura
175 | C::KaruraTestnet
176 | C::Moonbeam
177 | C::Moonriver => 12_500,
178
179 C::BinanceSmartChain | C::BinanceSmartChainTestnet => 3_000,
180
181 C::Avalanche | C::AvalancheFuji => 2_000,
182
183 C::Fantom | C::FantomTestnet => 1_200,
184
185 C::Cronos | C::CronosTestnet | C::Canto | C::CantoTestnet => 5_700,
186
187 C::Evmos | C::EvmosTestnet => 1_900,
188
189 C::Aurora | C::AuroraTestnet => 1_100,
190
191 C::Oasis => 5_500,
192
193 C::Emerald => 6_000,
194
195 C::Dev | C::AnvilHardhat => 200,
196
197 C::Celo | C::CeloAlfajores | C::CeloBaklava => 5_000,
198
199 C::FilecoinCalibrationTestnet | C::FilecoinMainnet => 30_000,
200
201 C::Scroll | C::ScrollSepolia => 3_000,
202
203 C::Shimmer => 5_000,
204
205 C::Gnosis | C::Chiado => 5_000,
206
207 C::Elastos => 5_000,
208
209 C::EtherlinkTestnet => 5_000,
210
211 C::Degen => 600,
212
213 C::Morden
214 | C::Ropsten
215 | C::Rinkeby
216 | C::Goerli
217 | C::Kovan
218 | C::Sepolia
219 | C::Holesky
220 | C::MantleTestnet
221 | C::Moonbase
222 | C::MoonbeamDev
223 | C::OptimismKovan
224 | C::Poa
225 | C::Sokol
226 | C::Rsk
227 | C::EmeraldTestnet
228 | C::Boba
229 | C::ZkSync
230 | C::ZkSyncTestnet
231 | C::PolygonZkEvm
232 | C::PolygonZkEvmTestnet
233 | C::Metis
234 | C::Linea
235 | C::LineaGoerli
236 | C::KakarotSepolia => return None,
237
238 C::OpBNBMainnet | C::OpBNBTestnet | C::AutonomysNovaTestnet => 1_000,
239
240 C::Ronin => 3_000,
241
242 C::Flare => 1_800,
243
244 C::FlareCoston2 => 2_500,
245 }))
246 }
247}