仮想通貨botのrecv_windowでエラーが出たときの解決方法


ccxtを使って仮想通貨botを開発していたとき、今まで普通に動いていたbotが急にエラーを吐き始めた。

 'ccxt.base.errors.InvalidNonce: bybit {"ret_code":10002,"ret_msg":"invalid '
 'request, please check your timestamp and recv_window param. req_timestamp: '
 '1649394900016 server_timestamp: 1649394905473 recv_window: '
 '5000","ext_code":"","ext_info":"","result":null,"time_now":"1649394905.473597"}\n')

調べてみると下記のような仕様らしい。

BybitのAPIはプログラム実行環境のタイムスタンプとBybitのサーパ環境のタイムスタンプが一定以上乖離しているとエラーになる仕組みとなっています。
https://itp-meikan.com/tips-bybit-bot-trouble

上記のサイトではリクエスト時に'recv_windows:500000'を設定して解決されているが、自分の場合はサーバのtimestampより自機のtimestampが前だったため、今回はccxtのbybit.pyを書き換える方法で解決してみた。

bybit.py
'recvWindow': 10 * 1000,  # 10 sec default  変更前は5 * 1000

自分の環境では'usr/local/lib/python3.9/site-packages/ccxt/bybit.py'を書き換え。

何秒に設定すべきかはエラーメッセージのreq_timestamp、server_timestampの差によるが、あまり大きな値にするとセキュリティ上の問題が発生する可能性があるので、ギリギリ通る値にした方が良いかもしれない。

同様の事象で悩まれている方は試してみて下さい。