@@ -2,6 +2,7 @@ use std::collections::HashMap;
22
33use alloy:: primitives:: { Address , Bytes , U256 , address} ;
44use eyre:: Context ;
5+ use lazy_static:: lazy_static;
56
67use crate :: {
78 interop:: lido:: types:: {
@@ -11,76 +12,78 @@ use crate::{
1112 types:: { Chain , HoleskyLidoModule , HoodiLidoModule , MainnetLidoModule } ,
1213} ;
1314
14- pub fn lido_registry_addresses_by_module ( ) -> HashMap < Chain , HashMap < u8 , Address > > {
15- let mut map: HashMap < Chain , HashMap < u8 , Address > > = HashMap :: new ( ) ;
16-
17- // --- Mainnet ---
18- let mut mainnet = HashMap :: new ( ) ;
19- mainnet. insert (
20- MainnetLidoModule :: Curated as u8 ,
21- address ! ( "55032650b14df07b85bF18A3a3eC8E0Af2e028d5" ) ,
22- ) ;
23- mainnet. insert (
24- MainnetLidoModule :: SimpleDVT as u8 ,
25- address ! ( "aE7B191A31f627b4eB1d4DaC64eaB9976995b433" ) ,
26- ) ;
27- mainnet. insert (
28- MainnetLidoModule :: CommunityStaking as u8 ,
29- address ! ( "dA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F" ) ,
30- ) ;
31- map. insert ( Chain :: Mainnet , mainnet) ;
32-
33- // --- Holesky ---
34- let mut holesky = HashMap :: new ( ) ;
35- holesky. insert (
36- HoleskyLidoModule :: Curated as u8 ,
37- address ! ( "595F64Ddc3856a3b5Ff4f4CC1d1fb4B46cFd2bAC" ) ,
38- ) ;
39- holesky. insert (
40- HoleskyLidoModule :: SimpleDVT as u8 ,
41- address ! ( "11a93807078f8BB880c1BD0ee4C387537de4b4b6" ) ,
42- ) ;
43- holesky. insert (
44- HoleskyLidoModule :: Sandbox as u8 ,
45- address ! ( "D6C2ce3BB8bea2832496Ac8b5144819719f343AC" ) ,
46- ) ;
47- holesky. insert (
48- HoleskyLidoModule :: CommunityStaking as u8 ,
49- address ! ( "4562c3e63c2e586cD1651B958C22F88135aCAd4f" ) ,
50- ) ;
51- map. insert ( Chain :: Holesky , holesky) ;
52-
53- // --- Hoodi ---
54- let mut hoodi = HashMap :: new ( ) ;
55- hoodi. insert (
56- HoodiLidoModule :: Curated as u8 ,
57- address ! ( "5cDbE1590c083b5A2A64427fAA63A7cfDB91FbB5" ) ,
58- ) ;
59- hoodi. insert (
60- HoodiLidoModule :: SimpleDVT as u8 ,
61- address ! ( "0B5236BECA68004DB89434462DfC3BB074d2c830" ) ,
62- ) ;
63- hoodi. insert (
64- HoodiLidoModule :: Sandbox as u8 ,
65- address ! ( "682E94d2630846a503BDeE8b6810DF71C9806891" ) ,
66- ) ;
67- hoodi. insert (
68- HoodiLidoModule :: CommunityStaking as u8 ,
69- address ! ( "79CEf36D84743222f37765204Bec41E92a93E59d" ) ,
70- ) ;
71- map. insert ( Chain :: Hoodi , hoodi) ;
72-
73- // --- Sepolia --
74- let mut sepolia = HashMap :: new ( ) ;
75- sepolia. insert ( 1 , address ! ( "33d6E15047E8644F8DDf5CD05d202dfE587DA6E3" ) ) ;
76- map. insert ( Chain :: Sepolia , sepolia) ;
77-
78- map
15+ lazy_static ! {
16+ static ref LIDO_REGISTRY_ADDRESSES_BY_MODULE : HashMap <Chain , HashMap <u8 , Address >> = {
17+ let mut map: HashMap <Chain , HashMap <u8 , Address >> = HashMap :: new( ) ;
18+
19+ // --- Mainnet ---
20+ let mut mainnet = HashMap :: new( ) ;
21+ mainnet. insert(
22+ MainnetLidoModule :: Curated as u8 ,
23+ address!( "55032650b14df07b85bF18A3a3eC8E0Af2e028d5" ) ,
24+ ) ;
25+ mainnet. insert(
26+ MainnetLidoModule :: SimpleDVT as u8 ,
27+ address!( "aE7B191A31f627b4eB1d4DaC64eaB9976995b433" ) ,
28+ ) ;
29+ mainnet. insert(
30+ MainnetLidoModule :: CommunityStaking as u8 ,
31+ address!( "dA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F" ) ,
32+ ) ;
33+ map. insert( Chain :: Mainnet , mainnet) ;
34+
35+ // --- Holesky ---
36+ let mut holesky = HashMap :: new( ) ;
37+ holesky. insert(
38+ HoleskyLidoModule :: Curated as u8 ,
39+ address!( "595F64Ddc3856a3b5Ff4f4CC1d1fb4B46cFd2bAC" ) ,
40+ ) ;
41+ holesky. insert(
42+ HoleskyLidoModule :: SimpleDVT as u8 ,
43+ address!( "11a93807078f8BB880c1BD0ee4C387537de4b4b6" ) ,
44+ ) ;
45+ holesky. insert(
46+ HoleskyLidoModule :: Sandbox as u8 ,
47+ address!( "D6C2ce3BB8bea2832496Ac8b5144819719f343AC" ) ,
48+ ) ;
49+ holesky. insert(
50+ HoleskyLidoModule :: CommunityStaking as u8 ,
51+ address!( "4562c3e63c2e586cD1651B958C22F88135aCAd4f" ) ,
52+ ) ;
53+ map. insert( Chain :: Holesky , holesky) ;
54+
55+ // --- Hoodi ---
56+ let mut hoodi = HashMap :: new( ) ;
57+ hoodi. insert(
58+ HoodiLidoModule :: Curated as u8 ,
59+ address!( "5cDbE1590c083b5A2A64427fAA63A7cfDB91FbB5" ) ,
60+ ) ;
61+ hoodi. insert(
62+ HoodiLidoModule :: SimpleDVT as u8 ,
63+ address!( "0B5236BECA68004DB89434462DfC3BB074d2c830" ) ,
64+ ) ;
65+ hoodi. insert(
66+ HoodiLidoModule :: Sandbox as u8 ,
67+ address!( "682E94d2630846a503BDeE8b6810DF71C9806891" ) ,
68+ ) ;
69+ hoodi. insert(
70+ HoodiLidoModule :: CommunityStaking as u8 ,
71+ address!( "79CEf36D84743222f37765204Bec41E92a93E59d" ) ,
72+ ) ;
73+ map. insert( Chain :: Hoodi , hoodi) ;
74+
75+ // --- Sepolia --
76+ let mut sepolia = HashMap :: new( ) ;
77+ sepolia. insert( 1 , address!( "33d6E15047E8644F8DDf5CD05d202dfE587DA6E3" ) ) ;
78+ map. insert( Chain :: Sepolia , sepolia) ;
79+
80+ map
81+ } ;
7982}
8083
8184// Fetching appropiate registry address
8285pub fn lido_registry_address ( chain : Chain , lido_module_id : u8 ) -> eyre:: Result < Address > {
83- lido_registry_addresses_by_module ( )
86+ LIDO_REGISTRY_ADDRESSES_BY_MODULE
8487 . get ( & chain)
8588 . ok_or_else ( || eyre:: eyre!( "Lido registry not supported for chain: {chain:?}" ) ) ?
8689 . get ( & lido_module_id)
0 commit comments