1use super::config::Config;
20use mixnet::core::PACKET_SIZE;
21use sc_network::{
22 config::{NonReservedPeerMode, SetConfig},
23 peer_store::PeerStoreProvider,
24 service::NotificationMetrics,
25 NetworkBackend, NotificationService, ProtocolName,
26};
27use sp_runtime::traits::Block as BlockT;
28
29pub fn protocol_name(genesis_hash: &[u8], fork_id: Option<&str>) -> ProtocolName {
31 let name = if let Some(fork_id) = fork_id {
32 format!("/{}/{}/mixnet/1", array_bytes::bytes2hex("", genesis_hash), fork_id)
33 } else {
34 format!("/{}/mixnet/1", array_bytes::bytes2hex("", genesis_hash))
35 };
36 name.into()
37}
38
39pub fn peers_set_config<Block: BlockT, Network: NetworkBackend<Block, <Block as BlockT>::Hash>>(
41 name: ProtocolName,
42 config: &Config,
43 metrics: NotificationMetrics,
44 peerstore_handle: std::sync::Arc<dyn PeerStoreProvider>,
45) -> (Network::NotificationProtocolConfig, Box<dyn NotificationService>) {
46 let set_config = if config.substrate.num_gateway_slots != 0 {
47 SetConfig {
50 in_peers: config.substrate.num_gateway_slots,
51 out_peers: 0,
52 reserved_nodes: Vec::new(),
53 non_reserved_mode: NonReservedPeerMode::Accept,
54 }
55 } else {
56 SetConfig {
57 in_peers: 0,
58 out_peers: 0,
59 reserved_nodes: Vec::new(),
60 non_reserved_mode: NonReservedPeerMode::Deny,
61 }
62 };
63
64 Network::notification_config(
65 name,
66 Vec::new(),
67 PACKET_SIZE as u64,
68 None,
69 set_config,
70 metrics,
71 peerstore_handle,
72 )
73}