ByBitのAPIいじくってたら困った話
ByBitのREST API弄ってたら困った話
ちょっとした依頼で、ByBitのAPIで注文できるようにしてくれと言われたので、
じゃあとりあえずやってみるかとドキュメントを検索
wiki的なのがあるのかと思ったんですが、なにやらマニュアルがGitに上がってました
ちなみにこれ、今落としてくるとそのままindex.htmlの中身が開けたんですが、
前にwebsocket周りを調べるときに落としたときはindex.htmlを開くとエラーが発生しました……まあ直ってるようで何よりです
で、まあindex.htmlの方をみると注文の仕方やなんやらが書いてあるんですが、
ぶっちゃけこれ見るよりも……というか、みても欲しい情報が載ってなかったので、
同じフォルダにあるrest_api.mdとrest_api_sign.mdをサクラエディタで開いてみてました
仮想通貨のrestあるあるなのか、それとも単にrest apiあるあるなのかはわからないですが、安定のシグネイチャーのセット処理
サンプルが何の言語なのかよくわかんないけど、とりあえず同じような処理をC#で実行してテストした結果、error sign!と返ってきたので、最初何がおかしいのかわからなかったけど、ああ、signってシグネイチャーのことか……どっかで間違えたかな
と、とりあえずソースコードを見直すことに
でも原因がよくわからん……
そうだ! rest_api_sign.mdにサンプルがあるから、とりあえず同じ値が帰ってくることを確認しよう!
ってことで確認したら、無事同じ値が帰ってきてることが判明
じゃあシグネイチャー大丈夫じゃん!
ってことでもう一度試すもエラー
パラメータがおかしいのかと思ったけど、いやそれならエラーメッセージがちゃんとそうなるだろう……ってことで、わからん……状態に
で、ふと気づいたんですが、
シグネイチャー作成するのに送信パラメータを秘密鍵で暗号化してるわけですが、
これってパラメータの順番変わったら値変わるよね?
それでも通るの?
と思って試した結果、error sign!と返ってきました
ふむ、ということは注文の送信用パラメータの順番がおかしいのか……なるほどね
ということでチェックした結果……
あってるやん!
ということに
正確に言うと、rest_api.mdに書かれている設定用のキー値を上から順番に並べてたんですが、えっ、これが違ってたらどうやって順番調べるの……?
まさか全パターン試せと?
いやいやいや……
と、困った結果ひらめきました!
ああそうだ、なんもパラメータ設定せずに送ったら、たぶんこのパラメータが足りません!ってエラーメッセージが返ってくるだろう、と思ったので、実際に試してみたところ
sideが足りません!
symbolが足りません!
order_typeが足りません!
と出てくれました
なるほど、じゃあとりあえずこの順番で並べればオッケーだね、と思ってside,symbol,order_typeの順に、まあ正確にはsideの前にapi_key、order_typeの後ろにtimestampとsignが設定してあったわけですが、これを送信した結果
error sign!
とエラーメッセージ!
とりあえずorder_typeの位置が悪かったみたいなので、先頭というかapi_keyの後ろに並べてみた結果、今度はqtyが足りません!と怒られたので、order_typeの後ろにqtyを設定
すると……
error sign!
やっぱり怒られました……
最終的にはorder_type,qty,side_symbolの順に並べると無事注文が行えたので一安心
……しかしこれ、成行注文のときの設定値なので、指値注文入れようものなら設定しないといけない項目が二つ追加され、その上、tpslを設定しようものならさらに二つ追加しないといけないわけですが……
素直に末尾につけるだけでは動いてくれないんでしょうね……
まあとりあえず注文通りに注文できる方法は発見したのでまあいいや、ということに
なんでシグネイチャーが一致しないんだと二時間近く悩んだ結果がこれだよ……
無駄に疲れました