use log::{info, warn};
use std::time::{Instant, Duration};
#[derive(Debug)]
pub enum MonitorError {
InvalidContractAddress,
MonitoringFailed,
}
pub fn monitor_contract_activity(
contract_address: &str,
event_name: &str,
poll_interval: Duration,
) -> Result<(), MonitorError> {
if contract_address.is_empty() {
return Err(MonitorError::InvalidContractAddress);
}
info!("Monitoring started for contract: {}", contract_address);
let start_time = Instant::now();
for _ in 0..5 {
info!("Polling contract for event '{}'...", event_name);
std::thread::sleep(poll_interval);
let error_happens = false;
if error_happens {
warn!("Warning: An issue occurred while monitoring contract: {}", contract_address);
return Err(MonitorError::MonitoringFailed);
} else {
info!("No new events detected.");
}
}
let elapsed_time = start_time.elapsed();
info!(
"Monitoring completed successfully for contract: {} in {:?} seconds.",
contract_address, elapsed_time
);
Ok(())
}