diff --git a/lib/ain-ocean/src/api/poolpairs.rs b/lib/ain-ocean/src/api/poolpairs.rs index c7f5b2654d0..ac1d9d3abd6 100644 --- a/lib/ain-ocean/src/api/poolpairs.rs +++ b/lib/ain-ocean/src/api/poolpairs.rs @@ -429,15 +429,25 @@ async fn get_swappable_tokens( Extension(ctx): Extension>, ) -> Result> { let mut token_ids: HashSet = HashSet::new(); - { - let graph = &ctx.services.token_graph.lock(); - let edges = graph.edges(token_id.parse::()?).collect::>(); + + fn recur(ctx: &Arc, mut token_ids: HashSet, token_id: u32) -> HashSet { + if token_ids.contains(&token_id) { + return token_ids + }; + token_ids.insert(token_id); + let graph = ctx.services.token_graph.lock().clone(); + let edges = graph.edges(token_id).collect::>(); + println!("edges: {:?}", edges); for edge in edges { - token_ids.insert(edge.0); - token_ids.insert(edge.1); + token_ids = recur(ctx, token_ids.clone(), edge.0); + token_ids = recur(ctx, token_ids.clone(), edge.1); } + token_ids } + token_ids = recur(&ctx, token_ids, token_id.parse::()?); + token_ids.remove(&token_id.parse::()?); + let mut swappable_tokens = Vec::new(); for id in token_ids.into_iter() { let token = get_token_identifier(&ctx, &id.to_string()).await?;