use alloy_primitives::Address;
use blueprint_eigenlayer_extra::registration::{RegistrationStateManager, RegistrationStatus};
use color_eyre::Result;
use std::str::FromStr;
pub async fn deregister_avs(service_manager_str: &str, _keystore_uri: &str) -> Result<()> {
println!("🔓 Deregistering from EigenLayer AVS");
let service_manager = Address::from_str(service_manager_str)
.map_err(|e| color_eyre::eyre::eyre!("Invalid service manager address: {}", e))?;
println!(" Service Manager: {:#x}", service_manager);
let mut state_manager = RegistrationStateManager::load()?;
let registration = state_manager
.registrations()
.get(service_manager)
.ok_or_else(|| {
color_eyre::eyre::eyre!("Not registered with AVS: {:#x}", service_manager)
})?;
if registration.status == RegistrationStatus::Deregistered {
println!("⚠️ AVS already deregistered");
return Ok(());
}
println!();
println!("📊 AVS Details:");
println!(" Operator: {:#x}", registration.operator_address);
println!(" Registered at: {}", registration.registered_at);
println!(
" Blueprint Path: {}",
registration.config.blueprint_path.display()
);
state_manager.deregister(service_manager)?;
println!();
println!("✅ Successfully deregistered from AVS");
println!();
println!("💡 Note:");
println!(" - The AVS blueprint will stop on next Blueprint Manager restart");
println!(" - To remove completely, delete from state file manually");
println!(" - For on-chain deregistration, use the operator lifecycle commands");
Ok(())
}