javascript - 创建 Deribit 签名字符串和哈希
问题描述
我一直在尝试使用 Deribit 测试网 API 连接到我的帐户,但我无法弄清楚为什么我的代码无法正常工作。
我的 Apps 脚本测试功能:
function callderibit() {
var key = '2YZn85siaUf5A'
var secret = 'BTMSIAJ8IYQTAV4MLN88UAHLIUNYZ3HN'
var nonce = '1452237485895' ;
var baseUrl = 'https://test.deribit.com';
var action = '/api/v1/private/account'
var string =
'_=' + nonce
+ '&_ackey=' + key
+ '&_acsec=' + secret
+ '&_action='+ action;
var hash = Utilities.computeDigest(Utilities.DigestAlgorithm.SHA_256,
string);
var hash_encoded = Utilities.base64Encode(hash);
var signature = key + '.' + nonce + '.' + hash_encoded ;
var options = {'headers': {'X-Deribit-Sig': signature}}
// Call the API
var response = UrlFetchApp.fetch(baseUrl + action , options )
//Parse the JSON reply
var json = response.getContentText();
var data = JSON.parse(json);
Logger.log(data);
}
这是我正在制作的签名:2YZn85siaUf5A.1452237485895.KOlc7ELGnz8cjYp614ONxZlngo/z2AHMEjVdlHlW9Oo=
我应该得到的签名是这个:2YZn85siaUf5A.1452237485895.LQctRklxPiJDHJj9ZYp78Epilx7N78crGghzr1pvNlI=
新信息
正如我们发现的那样,deribits 网站上提供的 js 和 py 示例无法正常运行,因为它们产生的哈希值与应有的不同。
在此之后,我与 deribit 取得了联系,我得到了这样的回复:.................................................. .........................................................
“你好
我附上了 API v1 的 Python 示例。您还可以在我们的 github 页面https://github.com/deribit上找到 API v1 的 Python、Nodejs 包装器
请注意,API v1 的进一步开发已经结束——尽管 API v1 仍然可用,我们更专注于 API v2 https://docs.deribit.com/v2 " .......... ..................................................... .....................
附上py:
#!/usr/bin/python
import time
import base64
import hashlib
from urllib.parse import urlencode
from urllib.request import Request, urlopen
api_key = 'API_KEY'
api_secret = 'API_SECRET'
instrument = 'BTC-PERPETUAL'
tstamp = '1485629332052'
price = 100
size = 1
params = (tstamp, api_key, api_secret, instrument, price, size)
data='_=%s&_ackey=%s&_acsec=%s&_action=/api/v1/private/buy&instrument=%s
&post_only=true&price=%0.2f&quantity=%d' % params
hashed = base64.b64encode(hashlib.sha256(data.encode()).digest())
signature = '%s.%s.%s' % (api_key, tstamp, hashed.decode())
headers = {"x-deribit-sig": signature, "content-type":"application/x-www-
form-urlencoded"}
# important: in signature post_only=true, but in params it was True - so
signature can't match
params={'instrument': instrument, 'post_only': 'true', 'price':
'%0.2f'%price,'quantity': size}
url = 'https://test.deribit.com/api/v1/private/buy'
data = urlencode(params).encode()
request = Request(url, urlencode(params).encode(), headers)
json = urlopen(request).read().decode()
print(json)
解决方案
推荐阅读
- javascript - Html2PDF模糊PDF
- jquery - 将对象从 JSONResult 传递给 jQuery 中的其他函数
- reactjs - 反应,测试输入占位符
- elasticsearch - Elasticsearch - 复合聚合最大值
- webpack - 蚂蚁设计主题的故事书不太行不通
- sql - 如何查看退货记录
- android-studio - 如何从代码中将文本颜色设置为 Android Studio 中的默认值?
- angular - RxJS mergeMap 等待内部 Observables
- c# - 如何将记录从 gridview 控件传递到 pdf 查看器 Devexpress
- r - R TaskScheduler:在执行任务时在 cmd 控制台上打印文本