python-3.x - CoinbaseProAPI/CBpro。验证。网络套接字。不应该这么难吗?
问题描述
在这里待了一周:每一天,每一天。没有任何工作。最低限度的身份验证有多难?我敢打赌,很多人也在寻找这个答案。
以下是我们目前所获得的草稿:
import cbpro, hmac, hashlib, time,
api_key = "[YOUR_API_KEY]"
secret_key = "[YOUR_B64SECRET]"
passphrase = "[YOUR_PASSPHRASE]"
message = message.encode('ascii')
hmac_key = base64.b64decode(secret_key)
signature = hmac.new(hmac_key, message, hashlib.sha256)
signature_b64 = base64.b64encode(signature.digest()).decode('utf-8')
auth_client = cbpro.AuthenticatedClient(api_key, signature_b64, passphrase)
auth_client.get_accounts()
或者在订阅 websockets 时,有这样的东西:
{
"type": "subscribe",
"product_ids": [
"BTC-USD"
],
"channels": ["full"],
"signature": "...",
"key": "...",
"passphrase": "...",
"timestamp": "..."
}
使用:
socket = "wss://ws-feed.pro.coinbase.com"
ws = websocket.WebSocketApp(socket, on_open=on_open, on_message=on_message)
ws.run_forever()
我不明白为什么简单的几行代码来验证和查看未结订单/帐户如此困难,而订阅 websocket 代码和接收价格变化却如此容易。对密钥进行编码应该不会太难吧?请帮助我们提供一个超级简短的示例(没有所有“ init ”和导入以及传递的不同函数)。希什
解决方案
“我不明白为什么简单的几行代码来验证和查看未结订单/帐户如此困难,而订阅 websocket 代码和接收价格变化却如此容易。”
这是因为您的代码不会生成经过身份验证的 websockets 会话。会话使用 'wss' aka TLS 进行保护,但在此会话中,您未通过其服务器的身份验证,因此您不会收到涉及您的帐户的交易消息的增强数据元素。接收价格数据不需要经过身份验证。
这就像您在“https”地址访问一个网站,但没有登录。“公共”数据通过安全连接发送给您。
cbpro 模块通过将未更改的 api 密钥、base64 编码的秘密和密码传递给它来创建一个 AuthenticatedClient 实例。在使用您的身份验证数据信任它之前,您应该真正查看任何模块的代码库,或者甚至将其安装在您的机器上,但对每个模块都是自己的。
import cbpro #, hmac, hashlib, time,
api_key = YOUR_API_KEY
secret_key = YOUR_B64SECRET
passphrase = YOUR_PASSPHRASE
# message = message.encode('ascii')
# hmac_key = base64.b64decode(secret_key)
# signature = hmac.new(hmac_key, message, hashlib.sha256)
# signature_b64 = base64.b64encode(signature.digest()).decode('utf-8')
auth_client = cbpro.AuthenticatedClient(api_key, secret_key, passphrase)
auth_client.get_accounts()
您可以通过运行您的 wss 客户端并在为该产品进行交易之前仅订阅该产品的“用户”频道来测试我所说的关于您的 websocket 代码如何正确验证的内容。在没有订阅其他频道的情况下,您将收到一条消息,表明服务器收到了您的新订单。然后您可以在测试后取消订单。如果您的代码确实允许您在“用户”通道中接收消息,那么 CoinbasePro 所做的事情与其文档中发布的内容不同。
推荐阅读
- c# - 如何构建一个允许随时间跟踪属性值的人员类
- java - 每次单击按钮时,Firebase 都会创建一个新对象
- docker - 发布容器(外部访问)
- scrapy - scrapy list 命令可以看到spider 但runspider 找不到?
- oracle12c - 从 Select 语句调用 Oracle 存储过程?
- bdd - 如何使用 QAF API 管理 Gherkin 中实现的步骤的响应数据?
- python - 如何在 Django 中以更新形式显示数据库中已有的数据?
- git - gitignore 所有带有扩展模式的文件
- ios - 从后台线程调用 ARKit UIView setAnimationsEnabled
- r - 双向重复测量方差分析:lm.fit() 中的错误... 0 个非 na 案例 (rstatix)