3.1 KiB
3.1 KiB
推荐服务 API Key 修复说明
问题描述
推荐服务(recommendations_main.py)仍然在使用真实的 API key,导致可能使用错误的账户(如 account_id=2)进行下单。
根本原因
- 推荐服务不应该使用任何账户的 API key:推荐服务只需要获取公开行情数据,不需要认证。
config.py在导入时会读取ATS_ACCOUNT_ID:如果推荐服务的 supervisor 配置中设置了ATS_ACCOUNT_ID=2,那么config.py会读取 account_id=2 的 API key。BinanceClient.__init__可能被覆盖:即使传入空字符串,如果config._config_manager存在,可能会在某个地方被覆盖。
修复方案
1. 修复 BinanceClient.__init__ 逻辑
确保传入空字符串时不会被 config 覆盖:
# 如果传入的是空字符串,保持为空字符串(不覆盖)
# 这样推荐服务可以使用空字符串来明确表示"只使用公开接口"
2. 修复 connect 方法
当 API key 为空时,跳过权限验证:
# 验证API密钥权限(仅当提供了有效的 API key 时)
if self.api_key and self.api_secret:
await self._verify_api_permissions()
else:
logger.info("✓ 使用公开 API,跳过权限验证(只能获取行情数据)")
3. 在推荐服务中添加验证
在 recommendations_main.py 中添加验证逻辑,确保 API key 确实是空的:
# 验证:确保 API key 确实是空的
if client.api_key:
logger.error(f"❌ 推荐服务 API Key 非空!当前值: {client.api_key[:4]}...")
logger.error(" 这可能导致推荐服务使用错误的账户密钥,请检查 BinanceClient.__init__ 逻辑")
else:
logger.info("✓ 推荐服务 API Key 确认为空,将只使用公开接口")
检查清单
- ✅ 确保
recommendations_main.py传入空字符串:BinanceClient(api_key="", api_secret="") - ✅ 确保
BinanceClient.__init__不会覆盖空字符串 - ✅ 确保
connect方法在 API key 为空时跳过权限验证 - ✅ 在推荐服务中添加验证逻辑,确保 API key 确实是空的
验证方法
-
查看推荐服务的日志,确认显示:
✓ 推荐服务 API Key 确认为空,将只使用公开接口✓ 使用公开 API,跳过权限验证(只能获取行情数据)
-
如果看到以下日志,说明仍有问题:
❌ 推荐服务 API Key 非空!初始化币安客户端: gqtx...sYmj, l3IB...I6NA(显示真实的 API key)
注意事项
- 推荐服务不应该设置
ATS_ACCOUNT_ID:推荐服务的 supervisor 配置不应该设置ATS_ACCOUNT_ID,或者应该明确设置为空。 - 推荐服务不应该下单:推荐服务只生成推荐,不应该进行任何下单操作。
- 如果推荐服务仍然使用真实的 API key:检查 supervisor 配置,确保推荐服务进程没有设置
ATS_ACCOUNT_ID。
后续优化
- 考虑在
config.py中添加一个标志,区分推荐服务和交易服务。 - 考虑在推荐服务启动时,明确清除
ATS_ACCOUNT_ID环境变量。