use alloy_primitives::Address;
use discv5::Enr;
use kona_genesis::RollupConfig;
use kona_p2p::{GaterConfig, LocalNode};
use kona_peers::{PeerMonitoring, PeerScoreLevel};
use kona_sources::BlockSigner;
use libp2p::{Multiaddr, identity::Keypair};
use std::path::PathBuf;
use tokio::time::Duration;
#[derive(Debug, Clone)]
pub struct NetworkConfig {
pub discovery_config: discv5::Config,
pub discovery_address: LocalNode,
pub discovery_interval: Duration,
pub discovery_randomize: Option<Duration>,
pub gossip_address: libp2p::Multiaddr,
pub unsafe_block_signer: Address,
pub keypair: Keypair,
pub gossip_config: libp2p::gossipsub::Config,
pub scoring: PeerScoreLevel,
pub topic_scoring: bool,
pub monitor_peers: Option<PeerMonitoring>,
pub bootstore: Option<PathBuf>,
pub gater_config: GaterConfig,
pub bootnodes: Vec<Enr>,
pub rollup_config: RollupConfig,
pub gossip_signer: Option<BlockSigner>,
}
impl NetworkConfig {
const DEFAULT_DISCOVERY_INTERVAL: Duration = Duration::from_secs(5);
const DEFAULT_DISCOVERY_RANDOMIZE: Option<Duration> = None;
pub fn new(
rollup_config: RollupConfig,
discovery_listen: LocalNode,
gossip_address: Multiaddr,
unsafe_block_signer: Address,
) -> Self {
Self {
rollup_config,
discovery_config: discv5::ConfigBuilder::new((&discovery_listen).into()).build(),
discovery_address: discovery_listen,
discovery_interval: Self::DEFAULT_DISCOVERY_INTERVAL,
discovery_randomize: Self::DEFAULT_DISCOVERY_RANDOMIZE,
gossip_address,
unsafe_block_signer,
keypair: Keypair::generate_secp256k1(),
bootnodes: Default::default(),
bootstore: Default::default(),
gater_config: Default::default(),
gossip_config: Default::default(),
scoring: Default::default(),
topic_scoring: Default::default(),
monitor_peers: Default::default(),
gossip_signer: Default::default(),
}
}
}