# cryptoChart.ts **路径**:`src/api/cryptoChart.ts` ## 功能用途 加密货币价格走势图 API,使用 **Binance REST + WebSocket** 实现细粒度(1 分钟)实时走势。当事件类型为加密货币时,详情页可切换显示 YES/NO 分时走势图与加密货币实时价格走势图。 ## 核心能力 - `isCryptoEvent`:判断事件是否为加密货币类型(通过 tags/series slug、ticker) - `inferCryptoSymbol`:从事件信息推断币种符号(btc、eth 等) - `fetchCryptoChart`:从 Binance 获取 1 分钟 K 线历史(优先),不支持时回退 CoinGecko - `subscribeCryptoRealtime`:订阅 Binance **归集交易**(aggTrade)WebSocket,实时推送每笔成交,比 K 线(约 1s)更细;内部 80ms 节流 + RAF 批处理,避免频繁 setOption 卡顿;支持 PING/PONG 保活 ## 币种映射 `COINGECKO_COIN_IDS` 支持:btc、eth、sol、bnb、xrp、doge、ada、avax、matic、dot、link、uni、atom、ltc、near、apt、arb、op、inj、sui、pepe、wif、shib 等。 ## 使用方式 ```typescript import { isCryptoEvent, inferCryptoSymbol, fetchCryptoChart } from '@/api/cryptoChart' if (isCryptoEvent(eventDetail)) { const symbol = inferCryptoSymbol(eventDetail) ?? 'btc' const res = await fetchCryptoChart({ symbol, range: '1D' }) const points = res.data ?? [] } ``` ## 30 秒走势(仅加密货币) - 30S 选项仅在加密货币走势图显示,YES/NO 分时与 EventMarkets 不包含 - 30S 数据:拉取 1H(60 分钟)走势,过滤保留最近 30 秒内的点展示 ## 扩展方式 - 新增币种:在 `COINGECKO_COIN_IDS` 中追加映射 - 更换数据源:修改 `fetchCryptoChart` 内部实现,或通过后端代理 CoinGecko 以规避 CORS - 实时流参考:[Binance WebSocket 归集交易](https://developers.binance.com/docs/zh-CN/binance-spot-api-docs/web-socket-streams#归集交易)