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}