ergo_rest/
known_nodes.rs

1use std::collections::HashMap;
2
3use ergo_chain_types::PeerAddr;
4
5use crate::NodeError;
6use crate::NodeInfo;
7
8/// Known nodes that are serving REST API
9pub struct KnownNodes {
10    http_nodes: Vec<PeerAddr>,
11    http_nodes_last_req: HashMap<PeerAddr, u64>,
12    // to ignore/skip during peer discovery
13    p2p_only_nodes: Vec<PeerAddr>,
14}
15
16impl KnownNodes {
17    /// Add node addresses that serve REST API
18    pub fn add(_addrs: Vec<PeerAddr>) {
19        todo!()
20    }
21
22    /// Export known nodes as serialized bytes
23    pub fn export(&self) -> Vec<u8> {
24        todo!()
25    }
26
27    /// Load known nodes from serialized bytes (previously exported with [`KnownNodes::export`])
28    pub fn import(_bytes: Vec<u8>) {
29        todo!()
30    }
31
32    /// Return all known nodes
33    pub fn get_all(&self) -> Vec<PeerAddr> {
34        todo!()
35    }
36
37    /// Ask known nodes for new nodes until `target_new_discovered` new nodes are discovered
38    /// or until we run out of nodes to ask
39    /// Adds new nodes to the internal list of known nodes and returns them
40    pub async fn discover_new_nodes(
41        &self,
42        _max_parallel_req: usize,
43        _target_new_discovered: usize,
44    ) -> Result<Vec<NodeInfo>, NodeError> {
45        // TODO: run NodeClient::get_peers_all() in paralellel on known nodes
46        // TODO: run NodeClient::get_info() for every new discovered node to confirm that it serves REST API
47        todo!()
48    }
49}