use ethers::prelude::*;
use ethers::abi::Abi;
use ethers::providers::{Provider, Http};
use std::sync::Arc;
use std::fs::File;
use std::io::Read;
use serde_json;
pub fn create_access_manager_instance(
abi_path: &str,
contract_address: &str,
provider: Arc<Provider<Http>>
) -> Result<Contract<Provider<Http>>, Box<dyn std::error::Error>> {
let mut abi_file = File::open(abi_path)?;
let mut abi_content = String::new();
abi_file.read_to_string(&mut abi_content)?;
let abi: Abi = serde_json::from_str(&abi_content)?;
let contract_address: Address = contract_address.parse()?;
let contract = Contract::new(contract_address, abi, provider);
Ok(contract)
}