fix: preserve futures token identity in canonical cache

Keep futureToken2Symbol keyed by raw futures token and use explicit spot-to-future alias mapping during resolver fallback lookups.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
2026-04-27 04:53:54 +07:00
parent 711721c1ee
commit d6338fa092
4 changed files with 14 additions and 17 deletions
+3 -7
View File
@@ -69,7 +69,7 @@ func (ms *MarketData) refreshFuturePairCache() error {
if token == "" {
continue
}
token = normalizeFutureToken(token)
token = futureCacheTokenKey(token)
futureTokenCandidates[token] = append(futureTokenCandidates[token], s.Symbol)
}
@@ -168,12 +168,8 @@ func selectCanonicalSymbolByQuotePriority(token string, candidates []string) str
return normalized[0]
}
func normalizeFutureToken(token string) string {
token = strings.ToUpper(token)
if mapped, ok := binance.FutureToken2SpotTokenMap[token]; ok {
return strings.ToUpper(mapped)
}
return token
func futureCacheTokenKey(token string) string {
return strings.ToUpper(token)
}
func (ms *MarketData) IsSpotPair(symbol string) bool {
+6 -6
View File
@@ -26,15 +26,15 @@ func TestSelectCanonicalSymbolByQuotePriority_NoPreferredQuote(t *testing.T) {
}
}
func TestNormalizeFutureToken_AppliesOverride(t *testing.T) {
got := normalizeFutureToken("LUNA2")
if got != "LUNA" {
t.Fatalf("expected LUNA, got %q", got)
func TestFutureCacheTokenKey_PreservesRawFutureToken(t *testing.T) {
got := futureCacheTokenKey("LUNA2")
if got != "LUNA2" {
t.Fatalf("expected LUNA2, got %q", got)
}
}
func TestNormalizeFutureToken_NoOverride(t *testing.T) {
got := normalizeFutureToken("PEPE")
func TestFutureCacheTokenKey_NoOverride(t *testing.T) {
got := futureCacheTokenKey("PEPE")
if got != "PEPE" {
t.Fatalf("expected PEPE, got %q", got)
}