CoinbaseProAPI/CBpro。验证。网络套接字。不应该这么难吗?

CoinbaseProAPI/CBpro. Authentication. Websocket. Shouldn't be this hard?

在这待了一个星期:每一天,每一天。什么都不起作用。 最小身份验证有多难?我敢打赌,很多人也在寻找这个答案。

这是我们目前所获得内容的草稿:

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()

我不明白为什么简单的几行代码来验证和查看打开 orders/account 如此困难,而订阅 websocket ticker 和接收价格变化却如此容易。编码密钥应该不会太难吧?请帮助我们提供一个超级简短的示例(没有所有“init”和导入以及传递的不同函数)。嘘

“我不明白为什么简单的几行代码来验证和查看打开 orders/account 如此困难,而订阅 websocket ticker 和接收价格变化却如此容易。”

这是因为您的代码不会生成经过身份验证的 websockets 会话。该会话使用 'wss' 又名 TLS 进行保护,但在此会话中,您未通过其服务器的身份验证,因此您不会收到涉及您帐户的交易消息的增强数据元素。接收价格数据不需要认证。

这就像您正在访问位于“https”地址的网站,但没有登录。“Public”数据正在通过安全连接发送给您。

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 正在做一些与其文档中发布的不同的事情。