IsToken không nhận diện spot-only token #24
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
binancex.IsTokenhiện chỉ kiểm tra token có futures pair quaToken2FutureSymbols, sau đó kiểm tra Alpha token. Hàm chưa kiểm tra spot pair/token, nên các token chỉ có spot market sẽ không được nhận diện là token hợp lệ.Evidence
internal/helper/binancex/symbol.go:32:IsTokentrảtruenếulen(Token2FutureSymbols(s)) > 0, sau đó mới checkdata.Market.IsAlphaToken(s).internal/services/tele/commands/chat.go:19: chat text chỉ đi vàoOnTokenInfokhibinancex.IsToken(text)trảtrue.internal/services/tele/commands/token.go:90: sau khi đã vào handler,collectRichTokenDatacó xử lý spot quaToken2SpotSymbols.internal/helper/binancex/resolver.go:63:Token2SpotSymbolsđã có fallback spot-only dạngTOKENUSDTvà gọidata.Market.IsSpotPair.internal/data/market/trading_pairs.go:29: hệ thống đã cache danh sách spot pairs.internal/data/market/trading_pairs.go:36: hệ thống đã cache danh sách futures pairs.internal/data/imarket.go:19: interface đã exposeIsSpotPairvàIsFuturesPair.Current Behavior
Nếu user gửi token spot-only trong chat, ví dụ token có
ABCUSDTtrên spot nhưng không có futures pair:OnChatHandlergọibinancex.IsToken("abc").Token2FutureSymbols("abc")trả empty.IsAlphaToken("ABC")trả false.IsTokentrả false.OnTokenInfo.Expected Behavior
IsTokennên nhận diện token hợp lệ nếu token có ít nhất một nguồn dữ liệu sau:Root Cause
IsTokenđang dùng futures availability làm proxy cho token validity. Điều này không đúng với spot-only tokens, trong khi codebase đã có cache pair/token và helperToken2SpotSymbolsđể kiểm tra spot.Suggested Direction
Cập nhật predicate để kiểm tra cả spot và futures trước Alpha, ví dụ theo logic:
len(Token2FutureSymbols(s)) > 0, hoặclen(Token2SpotSymbols(s)) > 0, hoặcdata.Market.IsAlphaToken(strings.ToUpper(s))Cần lưu ý tránh gọi trùng/đệ quy không cần thiết nếu dùng
Token2SpotSymbols, vì hàm này hiện gọiToken2FutureSymbolstrước rồi mới fallback spot-only.