问题描述
已经在这一个星期了:每一天,一个人,一天。没有任何工作。 最小身份验证有多难?我敢打赌,很多人也在寻找这个答案。
以下是我们目前的草稿:
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()
{
"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”(又名 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 正在做与其文档中发布的内容不同的事情。