@@ -50,10 +50,23 @@ pub fn use_sync_v2_pools() {
5050 } ) ;
5151}
5252
53+ pub fn is_zero_or_empty ( v : & Option < String > ) -> bool {
54+ match v. as_deref ( ) {
55+ None => true ,
56+ Some ( "" ) => true ,
57+ Some ( "0" ) => true ,
58+ Some ( "0.0" ) => true ,
59+ Some ( s) => {
60+ // also handle cases like "0.0000"
61+ s. trim ( ) . parse :: < f64 > ( ) . map ( |n| n == 0.0 ) . unwrap_or ( false )
62+ }
63+ }
64+ }
5365
5466pub fn unique_pool_tokens (
5567 selected_a : & Option < TokenInfo > ,
5668 pairs : & Vec < V2PairInfo > ,
69+ zero_liquid : & bool ,
5770) -> Vec < TokenInfo > {
5871 let address = if let Some ( a) = selected_a{
5972 a. address . clone ( )
@@ -64,31 +77,33 @@ pub fn unique_pool_tokens(
6477 let mut out = vec ! [ ] ;
6578
6679 for p in pairs {
67- // Check if Token A is token0
68- if p. token0 == address || address. is_empty ( ) {
69- let token_b = TokenInfo {
70- symbol : p. symbol1 . clone ( ) . unwrap_or ( "???" . into ( ) ) ,
71- address : p. token1 . clone ( ) ,
72- decimals : p. decimals1 . unwrap_or ( 18 ) ,
73- token_type : TokenType :: CAsset ,
74-
75- } ;
76- if seen. insert ( token_b. address . clone ( ) ) {
77- out. push ( token_b) ;
80+ if * zero_liquid || ( !is_zero_or_empty ( & p. reserve0 ) && !is_zero_or_empty ( & p. reserve1 ) ) {
81+ // Check if Token A is token0
82+ if p. token0 == address || address. is_empty ( ) {
83+ let token_b = TokenInfo {
84+ symbol : p. symbol1 . clone ( ) . unwrap_or ( "???" . into ( ) ) ,
85+ address : p. token1 . clone ( ) ,
86+ decimals : p. decimals1 . unwrap_or ( 18 ) ,
87+ token_type : TokenType :: CAsset ,
88+
89+ } ;
90+ if seen. insert ( token_b. address . clone ( ) ) {
91+ out. push ( token_b) ;
92+ }
7893 }
79- }
8094
81- // Check if Token A is token1
82- if p. token1 == address || address. is_empty ( ) {
83- let token_b = TokenInfo {
84- symbol : p. symbol0 . clone ( ) . unwrap_or ( "???" . into ( ) ) ,
85- address : p. token0 . clone ( ) ,
86- decimals : p. decimals0 . unwrap_or ( 18 ) ,
87- token_type : TokenType :: CAsset ,
88-
89- } ;
90- if seen. insert ( token_b. address . clone ( ) ) {
91- out. push ( token_b) ;
95+ // Check if Token A is token1
96+ if p. token1 == address || address. is_empty ( ) {
97+ let token_b = TokenInfo {
98+ symbol : p. symbol0 . clone ( ) . unwrap_or ( "???" . into ( ) ) ,
99+ address : p. token0 . clone ( ) ,
100+ decimals : p. decimals0 . unwrap_or ( 18 ) ,
101+ token_type : TokenType :: CAsset ,
102+
103+ } ;
104+ if seen. insert ( token_b. address . clone ( ) ) {
105+ out. push ( token_b) ;
106+ }
92107 }
93108 }
94109 }
0 commit comments