空跑补一次带签名请求,否则密钥与白名单根本没被验到

dryrun 第 5 步声称"会真实验到密钥与白名单",但 start() 在空跑下于密钥检查
之前就 return,全程只发了 contracts() —— 那是公开端点,不验签。于是空跑会
"通过"却什么都没测到。这种假保证比不测更糟:等第一个真信号来时才暴露,而
信号那时正在过期,没有从容排查的余地。

现在空跑返回前发一次 account()(只读),失败即退出并给出码表(40018 白名单
/ 40037 key 不存在 / 40001,40009 secret,passphrase / 40099 权限)。顺带报
可用余额,并在不足 MAX_OPEN 笔并发所需保证金时告警。

两处 SystemExit 会绕过 run() 的收尾,退出前不关 aiohttp 会话,日志尾部一串
Unclosed client session 会把真正的报错顶出视野。都补上了 close()。

BITGET_PASSPHRASE 现在也接受 BITGET_API_PASSPHRASE:另两项都带 API_,只有
它不带,很容易顺手写错,而后果是"像是填了"但签名一直失败。我自己就踩了。

启动时打一行 Telegram 是否启用。配错 token 的表现原本是完全静默。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
jack
2026-08-28 18:17:53 +08:00
co-authored by Cursor
parent d797adc77e
commit 9562b8c598
3 changed files with 43 additions and 5 deletions
+6 -1
View File
@@ -44,7 +44,12 @@ class Bitget:
dry: bool = False):
self.key = key or os.environ.get("BITGET_API_KEY", "")
self.secret = secret or os.environ.get("BITGET_API_SECRET", "")
self.passphrase = passphrase or os.environ.get("BITGET_PASSPHRASE", "")
# 两个名字都收:另外两项是 BITGET_API_KEY / BITGET_API_SECRET
# 这一项却没有 API_,很容易顺手写成 BITGET_API_PASSPHRASE。写错的
# 后果是"密钥像是填了"但签名一直失败,排查起来很绕
self.passphrase = (passphrase
or os.environ.get("BITGET_PASSPHRASE", "")
or os.environ.get("BITGET_API_PASSPHRASE", ""))
self.dry = dry
self._sess = None