调用Kraken API查询账户余额返回Invalid Nonce错误如何解决
错误原因及解决方案
核心错误原因
Kraken API的nonce规则要求:同一个API密钥发起的所有请求的nonce必须是严格递增的正整数,只要出现小于等于之前用过的nonce的情况,就会返回EAPI:Invalid nonce错误。你的代码问题属于以下常见场景之一:
对应解决方法
- 替换为微秒级精度nonce
你当前用的str(int(1000*time.time()))是毫秒精度,同一毫秒内发起多次请求、或者脚本高频运行时很容易出现重复值。直接修改nonce生成逻辑为微秒级即可大幅降低重复概率:"nonce": str(int(time.time() * 1000000)) - 修正历史nonce过大问题
如果你之前用同一个API密钥测试时用过更大的nonce(比如之前用了微秒级nonce、或者手动输入过远大于当前毫秒级的数值),Kraken服务端会记录你用过的最大nonce,后续所有请求的nonce必须大于这个值,否则会持续报错。你可以在当前nonce后面补固定位数的0,保证数值大于历史值:# 示例:毫秒级nonce补3个0,等价于微秒级精度,覆盖之前的小数值 "nonce": str(int(1000*time.time())) + "000" - 同步本地系统时间
如果你的本地设备时间和互联网标准时间偏差超过5秒,生成的时间戳类nonce会远小于Kraken服务端的预期范围,也会触发报错。开启设备的自动网络时间同步功能即可解决。
验证方法
你可以在每次生成nonce后打印数值,连续运行两次脚本,确认第二次输出的nonce数值大于第一次,即可验证nonce递增逻辑正常。
内容的提问来源于stack exchange,提问作者Jack_T
相关产品推荐
相关产品推荐

