※とりあえず簡潔に書きますがそのうち詳細のコードとかは記載するかも
何をしようとしたのか
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ライフを。