use std::str::FromStr;
use crate::{
common::chain::is_destination_chain,
config::contracts::{get_deployment_env, load_deployment_json},
};
use alloy::primitives::{Address, ChainId};
use serde_json::Value;
fn load_newton_prover_data(chain_id: ChainId) -> eyre::Result<Value> {
let env = get_deployment_env();
let category = if is_destination_chain(chain_id) {
"newton-cross-chain"
} else {
"newton-prover"
};
let raw = load_deployment_json(category, chain_id, &env)
.map_err(|e| eyre::eyre!("Failed to load Newton prover deployment data: {}", e))?;
serde_json::from_str(&raw).map_err(|e| eyre::eyre!("Failed to parse Newton prover deployment data: {}", e))
}
fn load_newton_policy_data(chain_id: ChainId) -> eyre::Result<Value> {
let env = get_deployment_env();
let raw = load_deployment_json("policy", chain_id, &env)
.map_err(|e| eyre::eyre!("Failed to load Newton policy deployment data: {}", e))?;
serde_json::from_str(&raw).map_err(|e| eyre::eyre!("Failed to parse Newton policy deployment data: {}", e))
}
fn load_eigenlayer_data(chain_id: ChainId) -> eyre::Result<Value> {
let env = get_deployment_env();
let raw = load_deployment_json("core", chain_id, &env)
.map_err(|e| eyre::eyre!("Failed to load Eigenlayer deployment data: {}", e))?;
serde_json::from_str(&raw).map_err(|e| eyre::eyre!("Failed to parse Eigenlayer deployment data: {}", e))
}
fn address_from(data: &Value, key: &str, description: &str) -> eyre::Result<Address> {
let addr = data["addresses"][key]
.as_str()
.ok_or_else(|| eyre::eyre!("{} address missing in deployment data", description))?;
Address::from_str(addr).map_err(|e| eyre::eyre!("Invalid {} address: {}", description, e))
}
pub async fn get_newton_operator_registry(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "operatorRegistry", "operator registry")
}
pub async fn get_newton_prover_service_manager(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "newtonProverServiceManager", "newton prover service manager")
}
pub async fn get_newton_operator_state_retriever(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "operatorStateRetriever", "operator state retriever")
}
pub async fn get_newton_prover_task_manager(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "newtonProverTaskManager", "newton prover task manager")
}
pub async fn get_challenge_verifier_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "challengeVerifier", "challenge verifier")
}
pub async fn get_attestation_validator_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "attestationValidator", "attestation validator")
}
pub async fn get_enclave_version_registry_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "enclaveVersionRegistry", "enclave version registry")
}
pub async fn get_test_newton_policy_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_policy_data(chain_id)?;
address_from(&data, "policy", "newton policy")
}
pub async fn get_mock_newton_policy_client_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_policy_data(chain_id)?;
address_from(&data, "policyClient", "mock newton policy client")
}
pub async fn get_test_newton_policy_data_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_policy_data(chain_id)?;
address_from(&data, "policyData", "test newton policy data")
}
pub async fn get_policy_factory_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_policy_data(chain_id)?;
address_from(&data, "policyFactory", "policy factory")
}
pub async fn get_policy_data_factory_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_policy_data(chain_id)?;
address_from(&data, "policyDataFactory", "policy data factory")
}
pub async fn get_mock_token_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "token", "mock token")
}
pub async fn get_mock_strategy(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "strategy", "mock strategy")
}
pub async fn get_bls_apk_registry_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "blsApkRegistry", "bls apk registry")
}
pub async fn get_socket_registry_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_newton_prover_data(chain_id)?;
address_from(&data, "socketRegistry", "socket registry")
}
pub async fn get_delegation_manager_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_eigenlayer_data(chain_id)?;
address_from(&data, "delegation", "delegation manager")
}
pub async fn get_strategy_manager_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_eigenlayer_data(chain_id)?;
address_from(&data, "strategyManager", "strategy manager")
}
pub async fn get_avs_directory_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_eigenlayer_data(chain_id)?;
address_from(&data, "avsDirectory", "avs directory")
}
pub async fn get_proxy_admin(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_eigenlayer_data(chain_id)?;
address_from(&data, "proxyAdmin", "proxy admin")
}
pub async fn get_rewards_coordinator_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_eigenlayer_data(chain_id)?;
address_from(&data, "rewardsCoordinator", "rewards coordinator")
}
pub async fn get_allocation_manager_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_eigenlayer_data(chain_id)?;
address_from(&data, "allocationManager", "allocation manager")
}
pub async fn get_permission_controller_address(chain_id: ChainId) -> eyre::Result<Address> {
let data = load_eigenlayer_data(chain_id)?;
address_from(&data, "permissionController", "permission controller")
}