LoginSignup
2
3

More than 3 years have passed since last update.

FTXのapi認証でつまづいた話

Last updated at Posted at 2020-06-13

※とりあえず簡潔に書きますがそのうち詳細のコードとかは記載するかも

何をしようとしたのか

GASでFTXに対してapiを叩こうとしていました。

公式のリファレンスになぜかjavascriptのサンプルがなかったので自力で書くことに

ログイン認証ができていないと返される

リファレンスだとヘッダに
・ apiKey
・ タイムスタンプ
・ SHA256で暗号化されたタイムスタンプ+リクエストメソッド+リクエストパス+本文
を付与してGETかPOST投げればいいことになっていますが

Not Logged in

しか返ってきませんでした。

公式にpythonを参考にしろと言われる

困ったあげく公式にヘルプを求めることにしましたが多分暗号化がうまくいっていないという趣旨の文章とccxtのリンクを渡されました。
とりあえずここにはjavascriptで書かれたコードもあるので一旦Node.jsでテストすることに

だんだんと分かってきたことがありました。

暗号化時にエンコードが必要

あまり詳しくないのですがFTXは暗号化をかける際にUint8Arrayに直しているそうです。
pythonの

signature_payload = f'{ts}{prepared.method}{prepared.path_url}'.encode()

にあたる部分
なるほど、ということでNode.jsでTextEncoderを呼び出して認証をかけると成功しました。

GASにそんな機能はないらしい

Uint8Arrayに変換するメソッドはないそうです。
あきらめかけながらGASのリファレンスを見ていた時に気づきました。

base64Decode
デコード時にUTF-8の配列が返ってくるそうです。
というわけで

Utilities.computeHmacSha256Signature(Utilities.base64Decode(Utilities.base64Encode(text)),
 Utilities.base64Decode(Utilities.base64Encode(secret)));

というややこしいやりかたで無事認証を通すことができましたとさ、というお話でした。

上のコードだとHEXになっていないので
こことかを参考にしてください。

それでは良いFTXライフを。

2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3