Skip to main content

ethers_abirpc/
named.rs

1use core::time::Duration;
2
3/// An Ethereum EIP-155 chain.
4#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, strum::IntoStaticStr)] // Into<&'static str>, AsRef<str>, fmt::Display and serde::Serialize
5#[derive(strum::VariantNames)] // NamedChain::VARIANTS
6#[derive(strum::VariantArray)] // NamedChain::VARIANTS
7#[derive(strum::EnumString)] // FromStr, TryFrom<&str>
8#[derive(strum::EnumIter)] // NamedChain::iter
9#[derive(strum::EnumCount)] // NamedChain::COUNT
10#[derive(num_enum::TryFromPrimitive)] // TryFrom<u64>
11#[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}