Coinbase Websocket, подпись при аутентификации

Как следует сгенерировать параметр подписи для открытия аутентифицированного соединения с Coinbase Websocket? Я нигде не могу найти краткого описания.

Для вызовов GET / PUT API я успешно сгенерировал его с помощью приведенного ниже кода, но с Websocket нет ни «метода», ни «path_url», так что же должно содержать «сообщение»?

    timestamp = str(time.time())
    message = timestamp + request.method + request.path_url + (request.body or '')
    hmac_key = base64.b64decode(self.secret_key)
    signature = hmac.new(hmac_key, message.encode('utf-8'), hashlib.sha256)
    signature_b64 = base64.b64encode(signature.digest())

person Gabriel S    schedule 14.11.2018    source источник
comment
Здесь такая же проблема. Вы нашли решение этой проблемы?   -  person Levi Roberts    schedule 02.05.2019
comment
Нет, я не нашел решения и, к сожалению, не получил ответа на свой вопрос.   -  person Gabriel S    schedule 03.05.2019
comment
Нашел решение. Пожалуйста, посмотрите мой опубликованный ответ.   -  person Levi Roberts    schedule 04.05.2019


Ответы (1)


Наконец-то я смог решить эту проблему. Конечно, код выглядит не так уж и интересно.

Я использую следующее вместе с библиотекой CCXT. Более конкретно, реализация вилки Websockets здесь.

const id = this.marketId (symbol)
const timestamp = Date.now() / 1000

const p_passphrase = this.safeValue(params, 'password')
const p_apiKey = this.safeValue(params, 'apiKey')
const p_secret = this.safeValue(params, 'secret')

const what = timestamp + 'GET' + '/users/self/verify'
const key = Buffer.from(p_secret, 'base64')
const hmac = require('crypto').createHmac('sha256', key)
const signature = hmac.update(what).digest('base64')

this.websocketSendJson({
  'type': 'subscribe',
  'product_ids': [id],
  'channels': ['user'],

  'key': p_apiKey,
  'signature': signature,
  'timestamp': timestamp,
  'passphrase': p_passphrase,
})

Надеюсь, это поможет!

person Levi Roberts    schedule 04.05.2019