blueprint_eigenlayer_testing_utils/
env.rs1use alloy_primitives::Uint;
2use alloy_primitives::{Address, address};
3use alloy_provider::Provider;
4use blueprint_chain_setup::anvil::get_receipt;
5use blueprint_core::info;
6use blueprint_evm_extra::util::get_provider_http;
7use blueprint_runner::eigenlayer::config::EigenlayerProtocolSettings;
8use eigensdk::utils::slashing::middleware::registrycoordinator::ISlashingRegistryCoordinatorTypes::OperatorSetParam;
9use eigensdk::utils::slashing::middleware::registrycoordinator::IStakeRegistryTypes::StrategyParams;
10use eigensdk::utils::slashing::middleware::registrycoordinator::RegistryCoordinator;
11use url::Url;
12
13pub const ALLOCATION_MANAGER_ADDR: Address = address!("8a791620dd6260079bf849dc5567adc3f2fdc318");
16pub const AVS_DIRECTORY_ADDR: Address = address!("5fc8d32690cc91d4c39d9d3abcbd16989f875707");
18pub const DELEGATION_MANAGER_ADDR: Address = address!("cf7ed3acca5a467e9e704c703e8d87f634fb0fc9");
20pub const STRATEGY_MANAGER_ADDR: Address = address!("a513e6e4b8f2a923d98304ec87f64353c4d5c853");
22pub const STRATEGY_FACTORY_ADDR: Address = address!("0b306bf915c4d645ff596e518faf3f9669b97016");
24pub const REWARDS_COORDINATOR_ADDR: Address = address!("b7f8bc63bbcad18155201308c8f3540b07f84f5e");
26pub const PAUSER_REGISTRY_ADDR: Address = address!("c6e7df5e7b4f2a278906862b61205850344d4e7d");
28pub const STRATEGY_BEACON_ADDR: Address = address!("c3e53f4d16ae77db1c982e75a937b9f60fe63690");
30pub const PERMISSION_CONTROLLER_ADDR: Address =
32 address!("3aa5ebb10dc797cac828524e59a333d0a371443c");
33pub const STRATEGY_ADDR: Address = address!("524f04724632eed237cba3c37272e018b3a7967e");
35pub const TOKEN_ADDR: Address = address!("4826533b4897376654bb4d4ad88b7fafd0c98528");
37pub const STAKE_REGISTRY_ADDR: Address = address!("4c5859f0f772848b2d91f1d83e2fe57935348029");
39
40pub const OPERATOR_STATE_RETRIEVER_ADDR: Address =
43 address!("b0d4afd8879ed9f52b28595d31b441d079b2ca07");
44pub const REGISTRY_COORDINATOR_ADDR: Address = address!("cd8a1c3ba11cf5ecfa6267617243239504a98d90");
46pub const SERVICE_MANAGER_ADDR: Address = address!("36c02da8a0983159322a80ffe9f24b1acff8b570");
48pub const SLASHER_ADDR: Address = address!("1429859428c0abc9c2c47c8ee9fbaf82cfa0f20f");
50
51pub struct EigenlayerTestEnvironment {
52 pub http_endpoint: String,
53 pub ws_endpoint: String,
54 pub accounts: Vec<Address>,
55 pub eigenlayer_contract_addresses: EigenlayerProtocolSettings,
56}
57
58#[allow(clippy::missing_panics_doc)]
64pub async fn setup_eigenlayer_test_environment<T: TryInto<Url>, U: TryInto<Url>>(
65 http_endpoint: T,
66 ws_endpoint: U,
67) -> EigenlayerTestEnvironment
68where
69 <T as TryInto<Url>>::Error: std::fmt::Debug,
70 <U as TryInto<Url>>::Error: std::fmt::Debug,
71{
72 let http_endpoint = http_endpoint.try_into().unwrap();
73 let ws_endpoint = ws_endpoint.try_into().unwrap();
74 let provider = get_provider_http(http_endpoint.clone());
75
76 let accounts = provider.get_accounts().await.unwrap();
77
78 unsafe {
79 std::env::set_var(
80 "REGISTRY_COORDINATOR_ADDR",
81 REGISTRY_COORDINATOR_ADDR.to_string(),
82 );
83 std::env::set_var(
84 "OPERATOR_STATE_RETRIEVER_ADDR",
85 OPERATOR_STATE_RETRIEVER_ADDR.to_string(),
86 );
87 std::env::set_var(
88 "DELEGATION_MANAGER_ADDR",
89 DELEGATION_MANAGER_ADDR.to_string(),
90 );
91 std::env::set_var(
92 "PERMISSION_CONTROLLER_ADDR",
93 PERMISSION_CONTROLLER_ADDR.to_string(),
94 );
95 std::env::set_var("SERVICE_MANAGER_ADDR", SERVICE_MANAGER_ADDR.to_string());
96 std::env::set_var("STAKE_REGISTRY_ADDR", STAKE_REGISTRY_ADDR.to_string());
97 std::env::set_var("STRATEGY_MANAGER_ADDR", STRATEGY_MANAGER_ADDR.to_string());
98 std::env::set_var("AVS_DIRECTORY_ADDR", AVS_DIRECTORY_ADDR.to_string());
99 std::env::set_var("SLASHER_ADDR", SLASHER_ADDR.to_string());
100 }
101
102 let registry_coordinator =
103 RegistryCoordinator::new(REGISTRY_COORDINATOR_ADDR, provider.clone());
104
105 let operator_set_params = OperatorSetParam {
106 maxOperatorCount: 10,
107 kickBIPsOfOperatorStake: 100,
108 kickBIPsOfTotalStake: 1000,
109 };
110 let strategy_params = StrategyParams {
111 strategy: TOKEN_ADDR,
112 multiplier: Uint::from(1),
113 };
114
115 info!("Creating Quorum...");
116 let _receipt = get_receipt(registry_coordinator.createTotalDelegatedStakeQuorum(
117 operator_set_params,
118 Uint::from(0),
119 vec![strategy_params],
120 ))
121 .await
122 .unwrap();
123
124 info!("Setup Eigenlayer test environment");
125
126 EigenlayerTestEnvironment {
127 http_endpoint: http_endpoint.to_string(),
128 ws_endpoint: ws_endpoint.to_string(),
129 accounts,
130 eigenlayer_contract_addresses: EigenlayerProtocolSettings {
131 allocation_manager_address: ALLOCATION_MANAGER_ADDR,
132 registry_coordinator_address: REGISTRY_COORDINATOR_ADDR,
133 operator_state_retriever_address: OPERATOR_STATE_RETRIEVER_ADDR,
134 delegation_manager_address: DELEGATION_MANAGER_ADDR,
135 service_manager_address: SERVICE_MANAGER_ADDR,
136 stake_registry_address: STAKE_REGISTRY_ADDR,
137 strategy_manager_address: STRATEGY_MANAGER_ADDR,
138 avs_directory_address: AVS_DIRECTORY_ADDR,
139 rewards_coordinator_address: REWARDS_COORDINATOR_ADDR,
140 permission_controller_address: PERMISSION_CONTROLLER_ADDR,
141 strategy_address: STRATEGY_ADDR,
142 },
143 }
144}