|
| 1 | +// ------------------------------------------------------------------------------------------------- |
| 2 | +// Copyright (C) 2015-2025 Nautech Systems Pty Ltd. All rights reserved. |
| 3 | +// https://nautechsystems.io |
| 4 | +// |
| 5 | +// Licensed under the GNU Lesser General Public License Version 3.0 (the "License"); |
| 6 | +// You may not use this file except in compliance with the License. |
| 7 | +// You may obtain a copy of the License at https://www.gnu.org/licenses/lgpl-3.0.en.html |
| 8 | +// |
| 9 | +// Unless required by applicable law or agreed to in writing, software |
| 10 | +// distributed under the License is distributed on an "AS IS" BASIS, |
| 11 | +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 12 | +// See the License for the specific language governing permissions and |
| 13 | +// limitations under the License. |
| 14 | +// ------------------------------------------------------------------------------------------------- |
| 15 | + |
| 16 | +#![allow(dead_code)] |
| 17 | +#![allow(unused_variables)] |
| 18 | + |
| 19 | +use std::fmt::{Display, Formatter}; |
| 20 | + |
| 21 | +use serde::{Deserialize, Serialize}; |
| 22 | +use strum::Display; |
| 23 | + |
| 24 | +/// Represents different blockchain networks |
| 25 | +#[derive( |
| 26 | + Debug, Clone, Copy, Hash, PartialOrd, PartialEq, Ord, Eq, Display, Serialize, Deserialize, |
| 27 | +)] |
| 28 | +pub enum Blockchain { |
| 29 | + Abstract, |
| 30 | + Arbitrum, |
| 31 | + ArbitrumNova, |
| 32 | + ArbitrumSepolia, |
| 33 | + Aurora, |
| 34 | + Avalanche, |
| 35 | + Base, |
| 36 | + BaseSepolia, |
| 37 | + Berachain, |
| 38 | + BerachainBartio, |
| 39 | + Blast, |
| 40 | + BlastSepolia, |
| 41 | + Boba, |
| 42 | + Bsc, |
| 43 | + BscTestnet, |
| 44 | + Celo, |
| 45 | + Chiliz, |
| 46 | + CitreaTestnet, |
| 47 | + Curtis, |
| 48 | + Cyber, |
| 49 | + Darwinia, |
| 50 | + Ethereum, |
| 51 | + Fantom, |
| 52 | + Flare, |
| 53 | + Fraxtal, |
| 54 | + Fuji, |
| 55 | + GaladrielDevnet, |
| 56 | + Gnosis, |
| 57 | + GnosisChiado, |
| 58 | + GnosisTraces, |
| 59 | + HarmonyShard0, |
| 60 | + Holesky, |
| 61 | + HoleskyTokenTest, |
| 62 | + Hyperliquid, |
| 63 | + HyperliquidTemp, |
| 64 | + Ink, |
| 65 | + InternalTestChain, |
| 66 | + Kroma, |
| 67 | + Linea, |
| 68 | + Lisk, |
| 69 | + Lukso, |
| 70 | + LuksoTestnet, |
| 71 | + Manta, |
| 72 | + Mantle, |
| 73 | + MegaethTestnet, |
| 74 | + Merlin, |
| 75 | + Metall2, |
| 76 | + Metis, |
| 77 | + MevCommit, |
| 78 | + Mode, |
| 79 | + MonadTestnet, |
| 80 | + MonadTestnetBackup, |
| 81 | + MoonbaseAlpha, |
| 82 | + Moonbeam, |
| 83 | + Morph, |
| 84 | + MorphHolesky, |
| 85 | + Opbnb, |
| 86 | + Optimism, |
| 87 | + OptimismSepolia, |
| 88 | + PharosDevnet, |
| 89 | + Polygon, |
| 90 | + PolygonAmoy, |
| 91 | + PolygonZkEvm, |
| 92 | + Rootstock, |
| 93 | + Saakuru, |
| 94 | + Scroll, |
| 95 | + Sepolia, |
| 96 | + ShimmerEvm, |
| 97 | + Soneium, |
| 98 | + Sophon, |
| 99 | + SophonTestnet, |
| 100 | + Superseed, |
| 101 | + Unichain, |
| 102 | + UnichainSepolia, |
| 103 | + Xdc, |
| 104 | + XdcTestnet, |
| 105 | + Zeta, |
| 106 | + Zircuit, |
| 107 | + ZKsync, |
| 108 | + Zora, |
| 109 | +} |
| 110 | + |
| 111 | +/// Defines a blockchain with its unique identifiers and connection details for network interaction. |
| 112 | +#[derive(Debug, Clone)] |
| 113 | +pub struct Chain { |
| 114 | + /// The blockchain network type |
| 115 | + pub name: Blockchain, |
| 116 | + /// The unique identifier for this blockchain |
| 117 | + pub chain_id: u32, |
| 118 | + /// URL endpoint for HyperSync connection |
| 119 | + pub hypersync_url: String, |
| 120 | + /// URL endpoint for the default RPC connection |
| 121 | + pub rpc_url: Option<String>, |
| 122 | +} |
| 123 | + |
| 124 | +impl Chain { |
| 125 | + pub fn new(name: Blockchain, chain_id: u32) -> Self { |
| 126 | + Self { |
| 127 | + chain_id, |
| 128 | + name, |
| 129 | + hypersync_url: format!("https://{}.hypersync.xyz", chain_id), |
| 130 | + rpc_url: None, |
| 131 | + } |
| 132 | + } |
| 133 | + |
| 134 | + /// Sets the RPC url endpoint |
| 135 | + pub fn set_rpc_url(&mut self, rpc: String) { |
| 136 | + self.rpc_url = Some(rpc); |
| 137 | + } |
| 138 | + |
| 139 | + /// Returns a reference to the `Chain` corresponding to the given `chain_id`, or `None` if it is not found. |
| 140 | + pub fn from_chain_id(chain_id: u32) -> Option<&'static Chain> { |
| 141 | + match chain_id { |
| 142 | + 2741 => Some(&chains::ABSTRACT), |
| 143 | + 42161 => Some(&chains::ARBITRUM), |
| 144 | + 42170 => Some(&chains::ARBITRUM_NOVA), |
| 145 | + 421614 => Some(&chains::ARBITRUM_SEPOLIA), |
| 146 | + 1313161554 => Some(&chains::AURORA), |
| 147 | + 43114 => Some(&chains::AVALANCHE), |
| 148 | + 8453 => Some(&chains::BASE), |
| 149 | + 84532 => Some(&chains::BASE_SEPOLIA), |
| 150 | + 80094 => Some(&chains::BERACHAIN), |
| 151 | + 80085 => Some(&chains::BERACHAIN_BARTIO), |
| 152 | + 81457 => Some(&chains::BLAST), |
| 153 | + 168587773 => Some(&chains::BLAST_SEPOLIA), |
| 154 | + 288 => Some(&chains::BOBA), |
| 155 | + 56 => Some(&chains::BSC), |
| 156 | + 97 => Some(&chains::BSC_TESTNET), |
| 157 | + 42220 => Some(&chains::CELO), |
| 158 | + 8888 => Some(&chains::CHILIZ), |
| 159 | + 3333 => Some(&chains::CITREA_TESTNET), |
| 160 | + 33111 => Some(&chains::CURTIS), |
| 161 | + 7560 => Some(&chains::CYBER), |
| 162 | + 46 => Some(&chains::DARWINIA), |
| 163 | + 1 => Some(&chains::ETHEREUM), |
| 164 | + 250 => Some(&chains::FANTOM), |
| 165 | + 14 => Some(&chains::FLARE), |
| 166 | + 252 => Some(&chains::FRAXTAL), |
| 167 | + 43113 => Some(&chains::FUJI), |
| 168 | + 696969 => Some(&chains::GALADRIEL_DEVNET), |
| 169 | + 100 => Some(&chains::GNOSIS), |
| 170 | + 10200 => Some(&chains::GNOSIS_CHIADO), |
| 171 | + 10300 => Some(&chains::GNOSIS_TRACES), |
| 172 | + 1666600000 => Some(&chains::HARMONY_SHARD_0), |
| 173 | + 17000 => Some(&chains::HOLESKY), |
| 174 | + 17001 => Some(&chains::HOLESKY_TOKEN_TEST), |
| 175 | + 7979 => Some(&chains::HYPERLIQUID), |
| 176 | + 7978 => Some(&chains::HYPERLIQUID_TEMP), |
| 177 | + 222 => Some(&chains::INK), |
| 178 | + 13337 => Some(&chains::INTERNAL_TEST_CHAIN), |
| 179 | + 255 => Some(&chains::KROMA), |
| 180 | + 59144 => Some(&chains::LINEA), |
| 181 | + 501 => Some(&chains::LISK), |
| 182 | + 42 => Some(&chains::LUKSO), |
| 183 | + 4201 => Some(&chains::LUKSO_TESTNET), |
| 184 | + 169 => Some(&chains::MANTA), |
| 185 | + 5000 => Some(&chains::MANTLE), |
| 186 | + 777 => Some(&chains::MEGAETH_TESTNET), |
| 187 | + 4200 => Some(&chains::MERLIN), |
| 188 | + 90 => Some(&chains::METALL2), |
| 189 | + 1088 => Some(&chains::METIS), |
| 190 | + 11 => Some(&chains::MEV_COMMIT), |
| 191 | + 34443 => Some(&chains::MODE), |
| 192 | + 2323 => Some(&chains::MONAD_TESTNET), |
| 193 | + 2358 => Some(&chains::MONAD_TESTNET_BACKUP), |
| 194 | + 1287 => Some(&chains::MOONBASE_ALPHA), |
| 195 | + 1284 => Some(&chains::MOONBEAM), |
| 196 | + 2710 => Some(&chains::MORPH), |
| 197 | + 2710111 => Some(&chains::MORPH_HOLESKY), |
| 198 | + 204 => Some(&chains::OPBNB), |
| 199 | + 10 => Some(&chains::OPTIMISM), |
| 200 | + 11155420 => Some(&chains::OPTIMISM_SEPOLIA), |
| 201 | + 1337 => Some(&chains::PHAROS_DEVNET), |
| 202 | + 137 => Some(&chains::POLYGON), |
| 203 | + 80002 => Some(&chains::POLYGON_AMOY), |
| 204 | + 1101 => Some(&chains::POLYGON_ZKEVM), |
| 205 | + 30 => Some(&chains::ROOTSTOCK), |
| 206 | + 1204 => Some(&chains::SAAKURU), |
| 207 | + 534352 => Some(&chains::SCROLL), |
| 208 | + 11155111 => Some(&chains::SEPOLIA), |
| 209 | + 148 => Some(&chains::SHIMMER_EVM), |
| 210 | + 109 => Some(&chains::SONEIUM), |
| 211 | + 138 => Some(&chains::SOPHON), |
| 212 | + 139 => Some(&chains::SOPHON_TESTNET), |
| 213 | + 10001 => Some(&chains::SUPERSEED), |
| 214 | + 9999 => Some(&chains::UNICHAIN), |
| 215 | + 9997 => Some(&chains::UNICHAIN_SEPOLIA), |
| 216 | + 50 => Some(&chains::XDC), |
| 217 | + 51 => Some(&chains::XDC_TESTNET), |
| 218 | + 7000 => Some(&chains::ZETA), |
| 219 | + 78600 => Some(&chains::ZIRCUIT), |
| 220 | + 324 => Some(&chains::ZKSYNC), |
| 221 | + 7777777 => Some(&chains::ZORA), |
| 222 | + _ => None, |
| 223 | + } |
| 224 | + } |
| 225 | +} |
| 226 | + |
| 227 | +impl Display for Chain { |
| 228 | + fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result { |
| 229 | + write!(f, "Chain(name={}, id={})", self.name, self.chain_id) |
| 230 | + } |
| 231 | +} |
| 232 | + |
| 233 | +// Define a module to contain all the chain definitions |
| 234 | +pub mod chains { |
| 235 | + use std::sync::LazyLock; |
| 236 | + |
| 237 | + use crate::defi::chain::{Blockchain, Chain}; |
| 238 | + |
| 239 | + pub static ABSTRACT: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Abstract, 2741)); |
| 240 | + pub static ARBITRUM: LazyLock<Chain> = |
| 241 | + LazyLock::new(|| Chain::new(Blockchain::Arbitrum, 42161)); |
| 242 | + pub static ARBITRUM_NOVA: LazyLock<Chain> = |
| 243 | + LazyLock::new(|| Chain::new(Blockchain::ArbitrumNova, 42170)); |
| 244 | + pub static ARBITRUM_SEPOLIA: LazyLock<Chain> = |
| 245 | + LazyLock::new(|| Chain::new(Blockchain::ArbitrumSepolia, 421614)); |
| 246 | + pub static AURORA: LazyLock<Chain> = |
| 247 | + LazyLock::new(|| Chain::new(Blockchain::Aurora, 1313161554)); |
| 248 | + pub static AVALANCHE: LazyLock<Chain> = |
| 249 | + LazyLock::new(|| Chain::new(Blockchain::Avalanche, 43114)); |
| 250 | + pub static BASE: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Base, 8453)); |
| 251 | + pub static BASE_SEPOLIA: LazyLock<Chain> = |
| 252 | + LazyLock::new(|| Chain::new(Blockchain::BaseSepolia, 84532)); |
| 253 | + pub static BERACHAIN: LazyLock<Chain> = |
| 254 | + LazyLock::new(|| Chain::new(Blockchain::Berachain, 80094)); |
| 255 | + pub static BERACHAIN_BARTIO: LazyLock<Chain> = |
| 256 | + LazyLock::new(|| Chain::new(Blockchain::BerachainBartio, 80085)); |
| 257 | + pub static BLAST: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Blast, 81457)); |
| 258 | + pub static BLAST_SEPOLIA: LazyLock<Chain> = |
| 259 | + LazyLock::new(|| Chain::new(Blockchain::BlastSepolia, 168587773)); |
| 260 | + pub static BOBA: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Boba, 288)); |
| 261 | + pub static BSC: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Bsc, 56)); |
| 262 | + pub static BSC_TESTNET: LazyLock<Chain> = |
| 263 | + LazyLock::new(|| Chain::new(Blockchain::BscTestnet, 97)); |
| 264 | + pub static CELO: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Celo, 42220)); |
| 265 | + pub static CHILIZ: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Chiliz, 8888)); |
| 266 | + pub static CITREA_TESTNET: LazyLock<Chain> = |
| 267 | + LazyLock::new(|| Chain::new(Blockchain::CitreaTestnet, 3333)); |
| 268 | + pub static CURTIS: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Curtis, 33111)); |
| 269 | + pub static CYBER: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Cyber, 7560)); |
| 270 | + pub static DARWINIA: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Darwinia, 46)); |
| 271 | + pub static ETHEREUM: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Ethereum, 1)); |
| 272 | + pub static FANTOM: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Fantom, 250)); |
| 273 | + pub static FLARE: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Flare, 14)); |
| 274 | + pub static FRAXTAL: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Fraxtal, 252)); |
| 275 | + pub static FUJI: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Fuji, 43113)); |
| 276 | + pub static GALADRIEL_DEVNET: LazyLock<Chain> = |
| 277 | + LazyLock::new(|| Chain::new(Blockchain::GaladrielDevnet, 696969)); |
| 278 | + pub static GNOSIS: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Gnosis, 100)); |
| 279 | + pub static GNOSIS_CHIADO: LazyLock<Chain> = |
| 280 | + LazyLock::new(|| Chain::new(Blockchain::GnosisChiado, 10200)); |
| 281 | + pub static GNOSIS_TRACES: LazyLock<Chain> = |
| 282 | + LazyLock::new(|| Chain::new(Blockchain::GnosisTraces, 100)); |
| 283 | + pub static HARMONY_SHARD_0: LazyLock<Chain> = |
| 284 | + LazyLock::new(|| Chain::new(Blockchain::HarmonyShard0, 1666600000)); |
| 285 | + pub static HOLESKY: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Holesky, 17000)); |
| 286 | + pub static HOLESKY_TOKEN_TEST: LazyLock<Chain> = |
| 287 | + LazyLock::new(|| Chain::new(Blockchain::HoleskyTokenTest, 17000)); |
| 288 | + pub static HYPERLIQUID: LazyLock<Chain> = |
| 289 | + LazyLock::new(|| Chain::new(Blockchain::Hyperliquid, 645749)); |
| 290 | + pub static HYPERLIQUID_TEMP: LazyLock<Chain> = |
| 291 | + LazyLock::new(|| Chain::new(Blockchain::HyperliquidTemp, 645748)); |
| 292 | + pub static INK: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Ink, 57073)); |
| 293 | + pub static INTERNAL_TEST_CHAIN: LazyLock<Chain> = |
| 294 | + LazyLock::new(|| Chain::new(Blockchain::InternalTestChain, 9876)); |
| 295 | + pub static KROMA: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Kroma, 255)); |
| 296 | + pub static LINEA: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Linea, 59144)); |
| 297 | + pub static LISK: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Lisk, 4000)); |
| 298 | + pub static LUKSO: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Lukso, 42)); |
| 299 | + pub static LUKSO_TESTNET: LazyLock<Chain> = |
| 300 | + LazyLock::new(|| Chain::new(Blockchain::LuksoTestnet, 4201)); |
| 301 | + pub static MANTA: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Manta, 169)); |
| 302 | + pub static MANTLE: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Mantle, 5000)); |
| 303 | + pub static MEGAETH_TESTNET: LazyLock<Chain> = |
| 304 | + LazyLock::new(|| Chain::new(Blockchain::MegaethTestnet, 2023)); |
| 305 | + pub static MERLIN: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Merlin, 4200)); |
| 306 | + pub static METALL2: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Metall2, 33210)); |
| 307 | + pub static METIS: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Metis, 1088)); |
| 308 | + pub static MEV_COMMIT: LazyLock<Chain> = |
| 309 | + LazyLock::new(|| Chain::new(Blockchain::MevCommit, 5432101)); |
| 310 | + pub static MODE: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Mode, 34443)); |
| 311 | + pub static MONAD_TESTNET: LazyLock<Chain> = |
| 312 | + LazyLock::new(|| Chain::new(Blockchain::MonadTestnet, 131313)); |
| 313 | + pub static MONAD_TESTNET_BACKUP: LazyLock<Chain> = |
| 314 | + LazyLock::new(|| Chain::new(Blockchain::MonadTestnetBackup, 131314)); |
| 315 | + pub static MOONBASE_ALPHA: LazyLock<Chain> = |
| 316 | + LazyLock::new(|| Chain::new(Blockchain::MoonbaseAlpha, 1287)); |
| 317 | + pub static MOONBEAM: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Moonbeam, 1284)); |
| 318 | + pub static MORPH: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Morph, 2221)); |
| 319 | + pub static MORPH_HOLESKY: LazyLock<Chain> = |
| 320 | + LazyLock::new(|| Chain::new(Blockchain::MorphHolesky, 2522)); |
| 321 | + pub static OPBNB: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Opbnb, 204)); |
| 322 | + pub static OPTIMISM: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Optimism, 10)); |
| 323 | + pub static OPTIMISM_SEPOLIA: LazyLock<Chain> = |
| 324 | + LazyLock::new(|| Chain::new(Blockchain::OptimismSepolia, 11155420)); |
| 325 | + pub static PHAROS_DEVNET: LazyLock<Chain> = |
| 326 | + LazyLock::new(|| Chain::new(Blockchain::PharosDevnet, 13371)); |
| 327 | + pub static POLYGON: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Polygon, 137)); |
| 328 | + pub static POLYGON_AMOY: LazyLock<Chain> = |
| 329 | + LazyLock::new(|| Chain::new(Blockchain::PolygonAmoy, 80002)); |
| 330 | + pub static POLYGON_ZKEVM: LazyLock<Chain> = |
| 331 | + LazyLock::new(|| Chain::new(Blockchain::PolygonZkEvm, 1101)); |
| 332 | + pub static ROOTSTOCK: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Rootstock, 30)); |
| 333 | + pub static SAAKURU: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Saakuru, 1442)); |
| 334 | + pub static SCROLL: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Scroll, 534352)); |
| 335 | + pub static SEPOLIA: LazyLock<Chain> = |
| 336 | + LazyLock::new(|| Chain::new(Blockchain::Sepolia, 11155111)); |
| 337 | + pub static SHIMMER_EVM: LazyLock<Chain> = |
| 338 | + LazyLock::new(|| Chain::new(Blockchain::ShimmerEvm, 148)); |
| 339 | + pub static SONEIUM: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Soneium, 2241)); |
| 340 | + pub static SOPHON: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Sophon, 2242)); |
| 341 | + pub static SOPHON_TESTNET: LazyLock<Chain> = |
| 342 | + LazyLock::new(|| Chain::new(Blockchain::SophonTestnet, 2323)); |
| 343 | + pub static SUPERSEED: LazyLock<Chain> = |
| 344 | + LazyLock::new(|| Chain::new(Blockchain::Superseed, 534351)); |
| 345 | + pub static UNICHAIN: LazyLock<Chain> = |
| 346 | + LazyLock::new(|| Chain::new(Blockchain::Unichain, 18231)); |
| 347 | + pub static UNICHAIN_SEPOLIA: LazyLock<Chain> = |
| 348 | + LazyLock::new(|| Chain::new(Blockchain::UnichainSepolia, 28231)); |
| 349 | + pub static XDC: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Xdc, 50)); |
| 350 | + pub static XDC_TESTNET: LazyLock<Chain> = |
| 351 | + LazyLock::new(|| Chain::new(Blockchain::XdcTestnet, 51)); |
| 352 | + pub static ZETA: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Zeta, 7000)); |
| 353 | + pub static ZIRCUIT: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Zircuit, 48899)); |
| 354 | + pub static ZKSYNC: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::ZKsync, 324)); |
| 355 | + pub static ZORA: LazyLock<Chain> = LazyLock::new(|| Chain::new(Blockchain::Zora, 7777777)); |
| 356 | +} |
| 357 | + |
| 358 | +#[cfg(test)] |
| 359 | +mod tests { |
| 360 | + use rstest::rstest; |
| 361 | + |
| 362 | + use super::*; |
| 363 | + |
| 364 | + #[rstest] |
| 365 | + fn test_ethereum_chain() { |
| 366 | + let eth_chain = chains::ETHEREUM.clone(); |
| 367 | + assert_eq!(eth_chain.to_string(), "Chain(name=Ethereum, id=1)"); |
| 368 | + assert_eq!(eth_chain.name, Blockchain::Ethereum); |
| 369 | + assert_eq!(eth_chain.chain_id, 1); |
| 370 | + assert_eq!(eth_chain.hypersync_url.as_str(), "https://1.hypersync.xyz") |
| 371 | + } |
| 372 | + |
| 373 | + #[rstest] |
| 374 | + fn test_arbitrum_chain() { |
| 375 | + let arbitrum_chain = chains::ARBITRUM.clone(); |
| 376 | + assert_eq!(arbitrum_chain.to_string(), "Chain(name=Arbitrum, id=42161)"); |
| 377 | + assert_eq!(arbitrum_chain.name, Blockchain::Arbitrum); |
| 378 | + assert_eq!(arbitrum_chain.chain_id, 42161); |
| 379 | + assert_eq!( |
| 380 | + arbitrum_chain.hypersync_url.as_str(), |
| 381 | + "https://42161.hypersync.xyz" |
| 382 | + ); |
| 383 | + } |
| 384 | +} |
0 commit comments