pub mod state;
use std::time::Duration;
use hopr_types::{crypto::prelude::Hash, primitive::prelude::Address};
use multiaddr::Multiaddr;
pub use multiaddr::PeerId;
pub use crate::chain::ChainInfo;
use crate::{chain::ChannelId, graph::traits::EdgeObservable, network::Health};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct OpenChannelResult {
pub tx_hash: Hash,
pub channel_id: ChannelId,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct CloseChannelResult {
pub tx_hash: Hash,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct SafeModuleConfig {
pub safe_address: Address,
pub module_address: Address,
}
#[async_trait::async_trait]
pub trait HoprNodeNetworkOperations {
type Error: std::error::Error + Send + Sync + 'static;
type TransportObservable: EdgeObservable + Send;
fn me_peer_id(&self) -> PeerId;
async fn get_public_nodes(&self) -> Result<Vec<(PeerId, Address, Vec<Multiaddr>)>, Self::Error>;
async fn network_health(&self) -> Health;
async fn network_connected_peers(&self) -> Result<Vec<PeerId>, Self::Error>;
fn network_peer_info(&self, peer: &PeerId) -> Option<Self::TransportObservable>;
async fn all_network_peers(
&self,
minimum_score: f64,
) -> Result<Vec<(Option<Address>, PeerId, Self::TransportObservable)>, Self::Error>;
fn local_multiaddresses(&self) -> Vec<Multiaddr>;
async fn listening_multiaddresses(&self) -> Vec<Multiaddr>;
async fn network_observed_multiaddresses(&self, peer: &PeerId) -> Vec<Multiaddr>;
async fn multiaddresses_announced_on_chain(&self, peer: &PeerId) -> Result<Vec<Multiaddr>, Self::Error>;
async fn ping(&self, peer: &PeerId) -> Result<(Duration, Self::TransportObservable), Self::Error>;
}
pub trait HoprNodeOperations {
fn status(&self) -> state::HoprState;
}